! $Id$
!
! Earth System Modeling Framework
! Copyright (c) 2002-2023, University Corporation for Atmospheric Research,
! Massachusetts Institute of Technology, Geophysical Fluid Dynamics
! Laboratory, University of Michigan, National Centers for Environmental
! Prediction, Los Alamos National Laboratory, Argonne National Laboratory,
! NASA Goddard Space Flight Center.
! Licensed under the University of Illinois-NCSA License.
!
!==============================================================================

!==============================================================================
! DO NOT EDIT THIS FILE DIRECTLY. IT IS GENERATED FROM A JINJA2 TEMPLATE FILE.
!   - Template files located in scripts/jinja2_templating/templates
!   - The template file is: ESMF_InfoCDefGeneric.jinja2
!   - All code edits must be done in that template file then re-generated
!   - See scripts/jinja2_templating/README.md for guidance
!==============================================================================

interface

!===============================================================================
! c_info_get ===================================================================
!===============================================================================

  subroutine c_info_get_R4(info, key, value, rc, default, idx, recursive) bind(C, name="ESMC_InfoGetR4")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(C_CHAR), intent(in) :: key(*)
    real(C_FLOAT), intent(out) :: value
    integer(C_INT), intent(inout) :: rc
    type(C_PTR), value :: default, idx
    integer(C_INT), intent(in) :: recursive
  end subroutine c_info_get_R4

  subroutine c_info_get_R8(info, key, value, rc, default, idx, recursive) bind(C, name="ESMC_InfoGetR8")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(C_CHAR), intent(in) :: key(*)
    real(C_DOUBLE), intent(out) :: value
    integer(C_INT), intent(inout) :: rc
    type(C_PTR), value :: default, idx
    integer(C_INT), intent(in) :: recursive
  end subroutine c_info_get_R8

  subroutine c_info_get_I4(info, key, value, rc, default, idx, recursive) bind(C, name="ESMC_InfoGetI4")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(C_CHAR), intent(in) :: key(*)
    integer(C_INT), intent(out) :: value
    integer(C_INT), intent(inout) :: rc
    type(C_PTR), value :: default, idx
    integer(C_INT), intent(in) :: recursive
  end subroutine c_info_get_I4

  subroutine c_info_get_I8(info, key, value, rc, default, idx, recursive) bind(C, name="ESMC_InfoGetI8")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(C_CHAR), intent(in) :: key(*)
    integer(C_LONG), intent(out) :: value
    integer(C_INT), intent(inout) :: rc
    type(C_PTR), value :: default, idx
    integer(C_INT), intent(in) :: recursive
  end subroutine c_info_get_I8

  subroutine c_info_get_LG(info, key, value, rc, default, idx, recursive) bind(C, name="ESMC_InfoGetLG")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(C_CHAR), intent(in) :: key(*)
    logical(C_BOOL), intent(out) :: value
    integer(C_INT), intent(inout) :: rc
    type(C_PTR), value :: default, idx
    integer(C_INT), intent(in) :: recursive
  end subroutine c_info_get_LG

  subroutine c_info_get_array_R4(info, key, value, itemcount, rc, recursive, local_scalarToArray_forC, expected_size) bind(C, name="ESMC_InfoGetArrayR4")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(C_CHAR), intent(in) :: key(*)
    real(C_FLOAT), dimension(*), intent(out) :: value
    integer(C_INT), intent(out) :: itemcount
    integer(C_INT), intent(inout) :: rc
    integer(C_INT), intent(in) :: recursive
    integer(C_INT), intent(in) :: local_scalarToArray_forC
    integer(C_INT), intent(in) :: expected_size
  end subroutine c_info_get_array_R4

  subroutine c_info_get_array_R8(info, key, value, itemcount, rc, recursive, local_scalarToArray_forC, expected_size) bind(C, name="ESMC_InfoGetArrayR8")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(C_CHAR), intent(in) :: key(*)
    real(C_DOUBLE), dimension(*), intent(out) :: value
    integer(C_INT), intent(out) :: itemcount
    integer(C_INT), intent(inout) :: rc
    integer(C_INT), intent(in) :: recursive
    integer(C_INT), intent(in) :: local_scalarToArray_forC
    integer(C_INT), intent(in) :: expected_size
  end subroutine c_info_get_array_R8

  subroutine c_info_get_array_I4(info, key, value, itemcount, rc, recursive, local_scalarToArray_forC, expected_size) bind(C, name="ESMC_InfoGetArrayI4")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(C_CHAR), intent(in) :: key(*)
    integer(C_INT), dimension(*), intent(out) :: value
    integer(C_INT), intent(out) :: itemcount
    integer(C_INT), intent(inout) :: rc
    integer(C_INT), intent(in) :: recursive
    integer(C_INT), intent(in) :: local_scalarToArray_forC
    integer(C_INT), intent(in) :: expected_size
  end subroutine c_info_get_array_I4

  subroutine c_info_get_array_I8(info, key, value, itemcount, rc, recursive, local_scalarToArray_forC, expected_size) bind(C, name="ESMC_InfoGetArrayI8")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(C_CHAR), intent(in) :: key(*)
    integer(C_LONG), dimension(*), intent(out) :: value
    integer(C_INT), intent(out) :: itemcount
    integer(C_INT), intent(inout) :: rc
    integer(C_INT), intent(in) :: recursive
    integer(C_INT), intent(in) :: local_scalarToArray_forC
    integer(C_INT), intent(in) :: expected_size
  end subroutine c_info_get_array_I8

  subroutine c_info_get_array_LG(info, key, value, itemcount, rc, recursive, local_scalarToArray_forC, expected_size) bind(C, name="ESMC_InfoGetArrayLG")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(C_CHAR), intent(in) :: key(*)
    logical(C_BOOL), dimension(*), intent(out) :: value
    integer(C_INT), intent(out) :: itemcount
    integer(C_INT), intent(inout) :: rc
    integer(C_INT), intent(in) :: recursive
    integer(C_INT), intent(in) :: local_scalarToArray_forC
    integer(C_INT), intent(in) :: expected_size
  end subroutine c_info_get_array_LG

!===============================================================================
! c_info_set ===================================================================
!===============================================================================

  subroutine c_info_set_R4(info, key, value, force, rc, idx, pkey) bind(C, name="ESMC_InfoSetR4")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(kind=C_CHAR), intent(in) :: key(*)
    real(C_FLOAT), intent(in) :: value
    logical(C_BOOL), intent(in) :: force
    integer(C_INT), intent(inout) :: rc
    type(C_PTR), value :: idx
    character(kind=C_CHAR), intent(in) :: pkey(*)
  end subroutine c_info_set_R4

  subroutine c_info_set_R8(info, key, value, force, rc, idx, pkey) bind(C, name="ESMC_InfoSetR8")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(kind=C_CHAR), intent(in) :: key(*)
    real(C_DOUBLE), intent(in) :: value
    logical(C_BOOL), intent(in) :: force
    integer(C_INT), intent(inout) :: rc
    type(C_PTR), value :: idx
    character(kind=C_CHAR), intent(in) :: pkey(*)
  end subroutine c_info_set_R8

  subroutine c_info_set_I4(info, key, value, force, rc, idx, pkey) bind(C, name="ESMC_InfoSetI4")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(kind=C_CHAR), intent(in) :: key(*)
    integer(C_INT), intent(in) :: value
    logical(C_BOOL), intent(in) :: force
    integer(C_INT), intent(inout) :: rc
    type(C_PTR), value :: idx
    character(kind=C_CHAR), intent(in) :: pkey(*)
  end subroutine c_info_set_I4

  subroutine c_info_set_I8(info, key, value, force, rc, idx, pkey) bind(C, name="ESMC_InfoSetI8")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(kind=C_CHAR), intent(in) :: key(*)
    integer(C_LONG), intent(in) :: value
    logical(C_BOOL), intent(in) :: force
    integer(C_INT), intent(inout) :: rc
    type(C_PTR), value :: idx
    character(kind=C_CHAR), intent(in) :: pkey(*)
  end subroutine c_info_set_I8

  subroutine c_info_set_CH(info, key, value, force, rc, idx, pkey) bind(C, name="ESMC_InfoSetCH")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(kind=C_CHAR), intent(in) :: key(*)
    character(C_CHAR), intent(in) :: value
    logical(C_BOOL), intent(in) :: force
    integer(C_INT), intent(inout) :: rc
    type(C_PTR), value :: idx
    character(kind=C_CHAR), intent(in) :: pkey(*)
  end subroutine c_info_set_CH

  subroutine c_info_set_LG(info, key, value, force, rc, idx, pkey) bind(C, name="ESMC_InfoSetLG")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(kind=C_CHAR), intent(in) :: key(*)
    logical(C_BOOL), intent(in) :: value
    logical(C_BOOL), intent(in) :: force
    integer(C_INT), intent(inout) :: rc
    type(C_PTR), value :: idx
    character(kind=C_CHAR), intent(in) :: pkey(*)
  end subroutine c_info_set_LG

  subroutine c_info_set_array_R4(info, key, value, itemcount, force, rc, pkey) bind(C, name="ESMC_InfoSetArrayR4")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(kind=C_CHAR), intent(in) :: key(*)
    real(C_FLOAT), dimension(*), intent(in) :: value
    integer(C_INT), intent(in) :: itemcount
    logical(C_BOOL), intent(in) :: force
    integer(C_INT), intent(inout) :: rc
    character(kind=C_CHAR), intent(in) :: pkey(*)
  end subroutine c_info_set_array_R4

  subroutine c_info_set_array_R8(info, key, value, itemcount, force, rc, pkey) bind(C, name="ESMC_InfoSetArrayR8")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(kind=C_CHAR), intent(in) :: key(*)
    real(C_DOUBLE), dimension(*), intent(in) :: value
    integer(C_INT), intent(in) :: itemcount
    logical(C_BOOL), intent(in) :: force
    integer(C_INT), intent(inout) :: rc
    character(kind=C_CHAR), intent(in) :: pkey(*)
  end subroutine c_info_set_array_R8

  subroutine c_info_set_array_I4(info, key, value, itemcount, force, rc, pkey) bind(C, name="ESMC_InfoSetArrayI4")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(kind=C_CHAR), intent(in) :: key(*)
    integer(C_INT), dimension(*), intent(in) :: value
    integer(C_INT), intent(in) :: itemcount
    logical(C_BOOL), intent(in) :: force
    integer(C_INT), intent(inout) :: rc
    character(kind=C_CHAR), intent(in) :: pkey(*)
  end subroutine c_info_set_array_I4

  subroutine c_info_set_array_I8(info, key, value, itemcount, force, rc, pkey) bind(C, name="ESMC_InfoSetArrayI8")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(kind=C_CHAR), intent(in) :: key(*)
    integer(C_LONG), dimension(*), intent(in) :: value
    integer(C_INT), intent(in) :: itemcount
    logical(C_BOOL), intent(in) :: force
    integer(C_INT), intent(inout) :: rc
    character(kind=C_CHAR), intent(in) :: pkey(*)
  end subroutine c_info_set_array_I8

  subroutine c_info_set_array_LG(info, key, value, itemcount, force, rc, pkey) bind(C, name="ESMC_InfoSetArrayLG")
    use iso_c_binding
    implicit none
    type(C_PTR), value :: info
    character(kind=C_CHAR), intent(in) :: key(*)
    logical(C_BOOL), dimension(*), intent(in) :: value
    integer(C_INT), intent(in) :: itemcount
    logical(C_BOOL), intent(in) :: force
    integer(C_INT), intent(inout) :: rc
    character(kind=C_CHAR), intent(in) :: pkey(*)
  end subroutine c_info_set_array_LG

end interface
