prepare_store_var Subroutine

private subroutine prepare_store_var(cfg, var_name, var_type, var_size, description, ix, dynamic_size)

Helper routine to store variables. This is useful because a lot of the same code is executed for the different types of variables.

Arguments

Type IntentOptional Attributes Name
type(CFG_t), intent(inout) :: cfg
character(len=*), intent(in) :: var_name
integer, intent(in) :: var_type
integer, intent(in) :: var_size
character(len=*), intent(in) :: description
integer, intent(out) :: ix

Index of variable

logical, intent(in), optional :: dynamic_size

Calls

proc~~prepare_store_var~~CallsGraph proc~prepare_store_var prepare_store_var proc~ensure_free_storage ensure_free_storage proc~prepare_store_var->proc~ensure_free_storage proc~get_var_index get_var_index proc~prepare_store_var->proc~get_var_index proc~handle_error handle_error proc~prepare_store_var->proc~handle_error proc~binary_search_variable binary_search_variable proc~get_var_index->proc~binary_search_variable

Called by

proc~~prepare_store_var~~CalledByGraph proc~prepare_store_var prepare_store_var proc~add_int add_int proc~add_int->proc~prepare_store_var proc~add_int_array add_int_array proc~add_int_array->proc~prepare_store_var proc~add_logic add_logic proc~add_logic->proc~prepare_store_var proc~add_logic_array add_logic_array proc~add_logic_array->proc~prepare_store_var proc~add_real add_real proc~add_real->proc~prepare_store_var proc~add_real_array add_real_array proc~add_real_array->proc~prepare_store_var proc~add_string add_string proc~add_string->proc~prepare_store_var proc~add_string_array add_string_array proc~add_string_array->proc~prepare_store_var proc~cfg_read_file CFG_read_file proc~cfg_read_file->proc~prepare_store_var interface~cfg_add CFG_add interface~cfg_add->proc~add_int interface~cfg_add->proc~add_int_array interface~cfg_add->proc~add_logic interface~cfg_add->proc~add_logic_array interface~cfg_add->proc~add_real interface~cfg_add->proc~add_real_array interface~cfg_add->proc~add_string interface~cfg_add->proc~add_string_array proc~add_get_int add_get_int proc~add_get_int->proc~add_int proc~add_get_int_array add_get_int_array proc~add_get_int_array->proc~add_int_array proc~add_get_logic add_get_logic proc~add_get_logic->proc~add_logic proc~add_get_logic_array add_get_logic_array proc~add_get_logic_array->proc~add_logic_array proc~add_get_real add_get_real proc~add_get_real->proc~add_real proc~add_get_real_array add_get_real_array proc~add_get_real_array->proc~add_real_array proc~add_get_string add_get_string proc~add_get_string->proc~add_string proc~add_get_string_array add_get_string_array proc~add_get_string_array->proc~add_string_array proc~cfg_update_from_arguments CFG_update_from_arguments proc~cfg_update_from_arguments->proc~cfg_read_file interface~cfg_add_get CFG_add_get interface~cfg_add_get->proc~add_get_int interface~cfg_add_get->proc~add_get_int_array interface~cfg_add_get->proc~add_get_logic interface~cfg_add_get->proc~add_get_logic_array interface~cfg_add_get->proc~add_get_real interface~cfg_add_get->proc~add_get_real_array interface~cfg_add_get->proc~add_get_string interface~cfg_add_get->proc~add_get_string_array

Source Code

  subroutine prepare_store_var(cfg, var_name, var_type, var_size, description,&
      ix, dynamic_size)
    type(CFG_t), intent(inout)    :: cfg
    character(len=*), intent(in)  :: var_name, description
    integer, intent(in)           :: var_type, var_size
    integer, intent(out)          :: ix
    !< Index of variable
    logical, intent(in), optional :: dynamic_size

    ! Check if variable already exists
    call get_var_index(cfg, var_name, ix)

    if (ix == -1) then ! Create a new variable
       call ensure_free_storage(cfg)
       cfg%sorted               = .false.
       ix                       = cfg%num_vars + 1
       cfg%num_vars             = cfg%num_vars + 1
       cfg%vars(ix)%used        = .false.
       cfg%vars(ix)%stored_data = ""
    else
       ! Only allowed when the variable is not yet created
       if (cfg%vars(ix)%var_type /= CFG_unknown_type) then
          call handle_error("prepare_store_var: variable [" // &
               & trim(var_name) // "] already exists")
       end if
    end if

    cfg%vars(ix)%var_name    = var_name
    cfg%vars(ix)%description = description
    cfg%vars(ix)%var_type    = var_type
    cfg%vars(ix)%var_size    = var_size

    if (present(dynamic_size)) then
       cfg%vars(ix)%dynamic_size = dynamic_size
    else
       cfg%vars(ix)%dynamic_size = .false.
    end if

    select case (var_type)
    case (CFG_integer_type)
       allocate( cfg%vars(ix)%int_data(var_size) )
    case (CFG_real_type)
       allocate( cfg%vars(ix)%real_data(var_size) )
    case (CFG_string_type)
       allocate( cfg%vars(ix)%char_data(var_size) )
    case (CFG_logic_type)
       allocate( cfg%vars(ix)%logic_data(var_size) )
    end select

  end subroutine prepare_store_var