! These structures are to be split by type
! real, int
!
MODULE definitions

TYPE variable_int

   LOGICAL :: is_data
   
   LOGICAL :: initial_value_set

   INTEGER :: value 
   INTEGER :: new_value

   INTEGER :: successful_changes
   
   ! HARD-CODED: these two are here iff the update strategy is random
   INTEGER :: updates_wanted
   INTEGER :: update_count
      
END TYPE variable_int

TYPE variable_real

   LOGICAL :: is_data
   
   LOGICAL :: initial_value_set
   
   REAL    :: value
   REAL    :: new_value   
   
   INTEGER :: successful_changes
   
   ! HARD-CODED: these two are here iff the update strategy is random
   INTEGER :: updates_wanted
   INTEGER :: update_count
    
   
END TYPE variable_real


TYPE variables_int

INTEGER :: buffer_index
INTEGER, ALLOCATABLE, DIMENSION(:) :: buffer

! the places of the variables missing in data.
INTEGER, ALLOCATABLE, DIMENSION(:) :: one_dim_missing
INTEGER, ALLOCATABLE, DIMENSION(:, :) :: two_dim_missing
! n, 2

TYPE(variable_int), ALLOCATABLE, DIMENSION(:) :: one_dim
TYPE(variable_int), ALLOCATABLE, DIMENSION(:, :) :: two_dim

END TYPE variables_int

TYPE variables_real

INTEGER :: buffer_index
REAL, ALLOCATABLE, DIMENSION(:) :: buffer

! the places of the variables missing in data.
INTEGER, ALLOCATABLE, DIMENSION(:) :: one_dim_missing
INTEGER, ALLOCATABLE, DIMENSION(:, :) :: two_dim_missing


TYPE(variable_real), ALLOCATABLE, DIMENSION(:) :: one_dim
TYPE(variable_real), ALLOCATABLE, DIMENSION(:, :) :: two_dim

END TYPE variables_real

END MODULE definitions
