ensure_free_storage Subroutine

private subroutine ensure_free_storage(cfg)

Routine to ensure that enough storage is allocated for the configuration type. If not the new size will be twice as much as the current size. If no storage is allocated yet a minumum amount of starage is allocated.

Arguments

Type IntentOptional Attributes Name
type(CFG_t), intent(inout) :: cfg

Called by

proc~~ensure_free_storage~~CalledByGraph proc~ensure_free_storage ensure_free_storage proc~prepare_store_var prepare_store_var proc~prepare_store_var->proc~ensure_free_storage 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 ensure_free_storage(cfg)
    type(CFG_t), intent(inout)   :: cfg
    type(CFG_var_t), allocatable :: cfg_copy(:)
    integer, parameter           :: min_dyn_size = 100
    integer                      :: cur_size, new_size

    if (allocated(cfg%vars)) then
       cur_size = size(cfg%vars)

       if (cur_size < cfg%num_vars + 1) then
          new_size = 2 * cur_size
          allocate(cfg_copy(cur_size))
          cfg_copy = cfg%vars
          deallocate(cfg%vars)
          allocate(cfg%vars(new_size))
          cfg%vars(1:cur_size) = cfg_copy
       end if
    else
       allocate(cfg%vars(min_dyn_size))
    end if

  end subroutine ensure_free_storage