Skip to content
Snippets Groups Projects
cppwrap_metadata.f90 2.02 KiB

module cppwrap_metadata

use, intrinsic :: iso_c_binding
use data_types

implicit none
  
contains

! **************************** var_info ********************************

  function new_handle_var_info() result(handle) bind(C, name='new_handle_var_info')
    
    type(c_ptr)             :: handle
    type(var_info), pointer :: p
    
    allocate(p)    
    handle = c_loc(p)   
    
  end function new_handle_var_info

!-----------------------------------
  subroutine delete_handle_var_info(handle) bind(C, name='delete_handle_var_info')
    
    type(c_ptr), intent(in), value :: handle
    type(var_info), pointer :: p
    
    call c_f_pointer(handle, p)
    deallocate(p)
    
  end subroutine delete_handle_var_info
  
!-----------------------------------
  subroutine set_data_var_info(handle, varname, vardesc, varunit, vartype, &
    ncVarID, ncVarID_size, statIndex, statIndex_size, varDesire) &
    bind(C, name='set_data_var_info')
    use cppwrap_auxiliary,only:c_f_string           
  
    implicit none
    
    type(c_ptr), intent(in),value :: handle
    character(kind=c_char,len=1),intent(in) :: varname(*), vardesc(*), varunit(*)
    integer(c_int), intent(in),value  :: vartype 
    integer(c_int), intent(in),value  :: ncVarID_size
    integer(c_int), intent(in)        :: ncVarID(ncVarID_size)
    integer(c_int), intent(in),value  :: statIndex_size
    integer(c_int), intent(in)        :: statIndex(statIndex_size)  
    integer(c_int), intent(in),value  :: varDesire
  	
    type(var_info), pointer           :: p
    integer :: i
	    
    call c_f_pointer(handle, p)
    
    call c_f_string(varname, p%varname, 64)
    call c_f_string(vardesc, p%vardesc, 128)
    call c_f_string(varunit, p%varunit, 64)
    p%vartype = vartype
    do i=1,ncVarID_size
      p%ncVarID(i) = ncVarID(i)
    end do
    do i=1,statIndex_size
      p%statIndex(i) = statIndex(i)
    end do
    if(varDesire == 0)then; p%varDesire = .false.; else; p%varDesire = .true.; endif
     
  end subroutine set_data_var_info

     
end module cppwrap_metadata