! wrapfstrings.f
! This file is generated by Shroud nowrite-version. Do not edit.
! Copyright (c) 2017-2021, Lawrence Livermore National Security, LLC and
! other Shroud Project Developers.
! See the top-level COPYRIGHT file for details.
!
! SPDX-License-Identifier: (BSD-3-Clause)
!
#include "shroud/features.h"
!>
!! \file wrapfstrings.f
!! \brief Shroud generated wrapper for strings library
!<
! splicer begin file_top
! splicer end file_top
module strings_mod
    ! splicer begin module_use
    ! splicer end module_use
    implicit none

    ! splicer begin module_top
    ! splicer end module_top

    ! ----------------------------------------
    ! Function:  void passChar
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char status +value
    ! Attrs:     +intent(in)
    ! Exact:     c_in_char_scalar
    interface
        subroutine pass_char(status) &
                bind(C, name="STR_pass_char")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), value, intent(IN) :: status
        end subroutine pass_char
    end interface

    ! ----------------------------------------
    ! Function:  void passCharForce
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char status +value
    ! Attrs:     +intent(in)
    ! Exact:     c_in_char_scalar
    interface
        subroutine c_pass_char_force(status) &
                bind(C, name="STR_pass_char_force")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), value, intent(IN) :: status
        end subroutine c_pass_char_force
    end interface

    ! ----------------------------------------
    ! Function:  char returnChar
    ! Attrs:     +intent(function)
    ! Exact:     c_function_char_scalar
    interface
        subroutine c_return_char(SHT_rv) &
                bind(C, name="STR_return_char")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(OUT) :: SHT_rv
        end subroutine c_return_char
    end interface

    ! ----------------------------------------
    ! Function:  void passCharPtr
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * dest +charlen(40)+intent(out)
    ! Attrs:     +intent(out)
    ! Requested: c_out_char_*
    ! Match:     c_default
    ! ----------------------------------------
    ! Argument:  const char * src
    ! Attrs:     +intent(in)
    ! Requested: c_in_char_*
    ! Match:     c_default
    ! start c_pass_char_ptr
    interface
        subroutine c_pass_char_ptr(dest, src) &
                bind(C, name="STR_pass_char_ptr")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(OUT) :: dest(*)
            character(kind=C_CHAR), intent(IN) :: src(*)
        end subroutine c_pass_char_ptr
    end interface
    ! end c_pass_char_ptr

    ! ----------------------------------------
    ! Function:  void passCharPtr
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * dest +charlen(40)+intent(out)
    ! Attrs:     +api(cfi)+intent(out)
    ! Exact:     c_out_char_*_cfi
    ! ----------------------------------------
    ! Argument:  const char * src
    ! Attrs:     +api(cfi)+intent(in)
    ! Exact:     c_in_char_*_cfi
    ! start pass_char_ptr
    interface
        subroutine pass_char_ptr(dest, src) &
                bind(C, name="STR_pass_char_ptr_CFI")
            implicit none
            character(len=*), intent(OUT) :: dest
            character(len=*), intent(IN) :: src
        end subroutine pass_char_ptr
    end interface
    ! end pass_char_ptr

    ! ----------------------------------------
    ! Function:  void passCharPtrInOut
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * s +intent(inout)
    ! Attrs:     +intent(inout)
    ! Requested: c_inout_char_*
    ! Match:     c_default
    interface
        subroutine c_pass_char_ptr_in_out(s) &
                bind(C, name="STR_pass_char_ptr_in_out")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(INOUT) :: s(*)
        end subroutine c_pass_char_ptr_in_out
    end interface

    ! ----------------------------------------
    ! Function:  void passCharPtrInOut
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * s +intent(inout)
    ! Attrs:     +api(cfi)+intent(inout)
    ! Exact:     c_inout_char_*_cfi
    interface
        subroutine pass_char_ptr_in_out(s) &
                bind(C, name="STR_pass_char_ptr_in_out_CFI")
            implicit none
            character(len=*), intent(INOUT) :: s
        end subroutine pass_char_ptr_in_out
    end interface

    ! ----------------------------------------
    ! Function:  const char * getCharPtr1
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Requested: c_function_char_*_allocatable
    ! Match:     c_function_char_*
    ! start c_get_char_ptr1
    interface
        function c_get_char_ptr1() &
                result(SHT_rv) &
                bind(C, name="STR_get_char_ptr1")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_char_ptr1
    end interface
    ! end c_get_char_ptr1

    ! ----------------------------------------
    ! Function:  const char * getCharPtr1
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_char_*_cfi_allocatable
    ! start c_get_char_ptr1_cfi
    interface
        subroutine c_get_char_ptr1_cfi(SHT_rv) &
                bind(C, name="STR_get_char_ptr1_CFI")
            implicit none
            character(len=:), intent(OUT), allocatable :: SHT_rv
        end subroutine c_get_char_ptr1_cfi
    end interface
    ! end c_get_char_ptr1_cfi

    ! ----------------------------------------
    ! Function:  const char * getCharPtr2 +len(30)
    ! Attrs:     +deref(copy)+intent(function)
    ! Requested: c_function_char_*_copy
    ! Match:     c_function_char_*
    ! start c_get_char_ptr2
    interface
        function c_get_char_ptr2() &
                result(SHT_rv) &
                bind(C, name="STR_get_char_ptr2")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_char_ptr2
    end interface
    ! end c_get_char_ptr2

    ! ----------------------------------------
    ! Function:  const char * getCharPtr2 +len(30)
    ! Attrs:     +api(cfi)+deref(copy)+intent(function)
    ! Requested: c_function_char_*_cfi_copy
    ! Match:     c_function_char_*_cfi
    ! start c_get_char_ptr2_cfi
    interface
        subroutine c_get_char_ptr2_cfi(SHT_rv) &
                bind(C, name="STR_get_char_ptr2_CFI")
            implicit none
            character(len=*), intent(OUT) :: SHT_rv
        end subroutine c_get_char_ptr2_cfi
    end interface
    ! end c_get_char_ptr2_cfi

    ! ----------------------------------------
    ! Function:  const char * getCharPtr3
    ! Attrs:     +intent(function)
    ! Exact:     c_function_char_*
    ! start c_get_char_ptr3
    interface
        function c_get_char_ptr3() &
                result(SHT_rv) &
                bind(C, name="STR_get_char_ptr3")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_char_ptr3
    end interface
    ! end c_get_char_ptr3

    ! ----------------------------------------
    ! Function:  void getCharPtr3
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * output
    ! Attrs:     +api(cfi)+deref(result)+intent(out)+is_result
    ! Requested: c_function_char_*_cfi_result
    ! Match:     c_function_char_*_cfi
    ! start c_get_char_ptr3_cfi
    interface
        subroutine c_get_char_ptr3_cfi(output) &
                bind(C, name="STR_get_char_ptr3_CFI")
            implicit none
            character(len=*), intent(OUT) :: output
        end subroutine c_get_char_ptr3_cfi
    end interface
    ! end c_get_char_ptr3_cfi

    ! ----------------------------------------
    ! Function:  const char * getCharPtr4 +deref(raw)
    ! Attrs:     +deref(raw)+intent(function)
    ! Requested: c_function_char_*_raw
    ! Match:     c_function_char_*
    interface
        function get_char_ptr4() &
                result(SHT_rv) &
                bind(C, name="STR_get_char_ptr4")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function get_char_ptr4
    end interface

#ifdef HAVE_CHARACTER_POINTER_FUNCTION
    ! ----------------------------------------
    ! Function:  const char * getCharPtr5 +deref(pointer)
    ! Attrs:     +deref(pointer)+intent(function)
    ! Requested: c_function_char_*_pointer
    ! Match:     c_function_char_*
    interface
        function c_get_char_ptr5() &
                result(SHT_rv) &
                bind(C, name="STR_get_char_ptr5")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_char_ptr5
    end interface
#endif

#ifdef HAVE_CHARACTER_POINTER_FUNCTION
    ! ----------------------------------------
    ! Function:  const char * getCharPtr5 +deref(pointer)
    ! Attrs:     +api(cfi)+deref(pointer)+intent(function)
    ! Exact:     c_function_char_*_cfi_pointer
    interface
        subroutine c_get_char_ptr5_cfi(SHT_rv) &
                bind(C, name="STR_get_char_ptr5_CFI")
            implicit none
            character(len=:), intent(OUT), pointer :: SHT_rv
        end subroutine c_get_char_ptr5_cfi
    end interface
#endif

    ! ----------------------------------------
    ! Function:  const string getConstStringResult
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_scalar_cfi_allocatable
    interface
        subroutine c_get_const_string_result_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_result_CFI")
            implicit none
            character(len=:), intent(OUT), allocatable :: SHT_rv
        end subroutine c_get_const_string_result_cfi
    end interface

    ! ----------------------------------------
    ! Function:  const string getConstStringLen +len(30)
    ! Attrs:     +api(cfi)+deref(copy)+intent(function)
    ! Requested: c_function_string_scalar_cfi_copy
    ! Match:     c_function_string_scalar_cfi
    interface
        subroutine c_get_const_string_len_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_len_CFI")
            implicit none
            character(len=*), intent(OUT) :: SHT_rv
        end subroutine c_get_const_string_len_cfi
    end interface

    ! ----------------------------------------
    ! Function:  void getConstStringAsArg
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  string * output
    ! Attrs:     +api(cfi)+deref(result)+intent(out)+is_result
    ! Requested: c_function_string_*_cfi_result
    ! Match:     c_function_string_*_cfi
    interface
        subroutine c_get_const_string_as_arg_cfi(output) &
                bind(C, name="STR_get_const_string_as_arg_CFI")
            implicit none
            character(len=*), intent(OUT) :: output
        end subroutine c_get_const_string_as_arg_cfi
    end interface

    ! ----------------------------------------
    ! Function:  const std::string getConstStringAlloc
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_scalar_cfi_allocatable
    interface
        subroutine c_get_const_string_alloc_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_alloc_CFI")
            implicit none
            character(len=:), intent(OUT), allocatable :: SHT_rv
        end subroutine c_get_const_string_alloc_cfi
    end interface

    ! ----------------------------------------
    ! Function:  const string & getConstStringRefPure
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Requested: c_function_string_&_allocatable
    ! Match:     c_function_string_&
    ! start c_get_const_string_ref_pure
    interface
        function c_get_const_string_ref_pure() &
                result(SHT_rv) &
                bind(C, name="STR_get_const_string_ref_pure")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_const_string_ref_pure
    end interface
    ! end c_get_const_string_ref_pure

    ! ----------------------------------------
    ! Function:  const string & getConstStringRefPure
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_&_cfi_allocatable
    ! start c_get_const_string_ref_pure_cfi
    interface
        subroutine c_get_const_string_ref_pure_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_ref_pure_CFI")
            implicit none
            character(len=:), intent(OUT), allocatable :: SHT_rv
        end subroutine c_get_const_string_ref_pure_cfi
    end interface
    ! end c_get_const_string_ref_pure_cfi

    ! ----------------------------------------
    ! Function:  const string & getConstStringRefLen +len(30)
    ! Attrs:     +deref(copy)+intent(function)
    ! Requested: c_function_string_&_copy
    ! Match:     c_function_string_&
    interface
        function c_get_const_string_ref_len() &
                result(SHT_rv) &
                bind(C, name="STR_get_const_string_ref_len")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_const_string_ref_len
    end interface

    ! ----------------------------------------
    ! Function:  const string & getConstStringRefLen +len(30)
    ! Attrs:     +api(cfi)+deref(copy)+intent(function)
    ! Requested: c_function_string_&_cfi_copy
    ! Match:     c_function_string_&_cfi
    interface
        subroutine c_get_const_string_ref_len_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_ref_len_CFI")
            implicit none
            character(len=*), intent(OUT) :: SHT_rv
        end subroutine c_get_const_string_ref_len_cfi
    end interface

    ! ----------------------------------------
    ! Function:  const string & getConstStringRefAsArg
    ! Attrs:     +intent(function)
    ! Exact:     c_function_string_&
    interface
        function c_get_const_string_ref_as_arg() &
                result(SHT_rv) &
                bind(C, name="STR_get_const_string_ref_as_arg")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_const_string_ref_as_arg
    end interface

    ! ----------------------------------------
    ! Function:  void getConstStringRefAsArg
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  string & output
    ! Attrs:     +api(cfi)+deref(result)+intent(out)+is_result
    ! Requested: c_function_string_&_cfi_result
    ! Match:     c_function_string_&_cfi
    interface
        subroutine c_get_const_string_ref_as_arg_cfi(output) &
                bind(C, name="STR_get_const_string_ref_as_arg_CFI")
            implicit none
            character(len=*), intent(OUT) :: output
        end subroutine c_get_const_string_ref_as_arg_cfi
    end interface

    ! ----------------------------------------
    ! Function:  const string & getConstStringRefLenEmpty +len(30)
    ! Attrs:     +deref(copy)+intent(function)
    ! Requested: c_function_string_&_copy
    ! Match:     c_function_string_&
    interface
        function c_get_const_string_ref_len_empty() &
                result(SHT_rv) &
                bind(C, name="STR_get_const_string_ref_len_empty")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_const_string_ref_len_empty
    end interface

    ! ----------------------------------------
    ! Function:  const string & getConstStringRefLenEmpty +len(30)
    ! Attrs:     +api(cfi)+deref(copy)+intent(function)
    ! Requested: c_function_string_&_cfi_copy
    ! Match:     c_function_string_&_cfi
    interface
        subroutine c_get_const_string_ref_len_empty_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_ref_len_empty_CFI")
            implicit none
            character(len=*), intent(OUT) :: SHT_rv
        end subroutine c_get_const_string_ref_len_empty_cfi
    end interface

    ! ----------------------------------------
    ! Function:  const std::string & getConstStringRefAlloc
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Requested: c_function_string_&_allocatable
    ! Match:     c_function_string_&
    interface
        function c_get_const_string_ref_alloc() &
                result(SHT_rv) &
                bind(C, name="STR_get_const_string_ref_alloc")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_const_string_ref_alloc
    end interface

    ! ----------------------------------------
    ! Function:  const std::string & getConstStringRefAlloc
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_&_cfi_allocatable
    interface
        subroutine c_get_const_string_ref_alloc_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_ref_alloc_CFI")
            implicit none
            character(len=:), intent(OUT), allocatable :: SHT_rv
        end subroutine c_get_const_string_ref_alloc_cfi
    end interface

    ! ----------------------------------------
    ! Function:  const string * getConstStringPtrLen +len(30)
    ! Attrs:     +deref(copy)+intent(function)
    ! Requested: c_function_string_*_copy
    ! Match:     c_function_string_*
    interface
        function c_get_const_string_ptr_len() &
                result(SHT_rv) &
                bind(C, name="STR_get_const_string_ptr_len")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_const_string_ptr_len
    end interface

    ! ----------------------------------------
    ! Function:  const string * getConstStringPtrLen +len(30)
    ! Attrs:     +api(cfi)+deref(copy)+intent(function)
    ! Requested: c_function_string_*_cfi_copy
    ! Match:     c_function_string_*_cfi
    interface
        subroutine c_get_const_string_ptr_len_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_ptr_len_CFI")
            implicit none
            character(len=*), intent(OUT) :: SHT_rv
        end subroutine c_get_const_string_ptr_len_cfi
    end interface

    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrAlloc +owner(library)
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Requested: c_function_string_*_allocatable
    ! Match:     c_function_string_*
    interface
        function c_get_const_string_ptr_alloc() &
                result(SHT_rv) &
                bind(C, name="STR_get_const_string_ptr_alloc")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_const_string_ptr_alloc
    end interface

    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrAlloc +owner(library)
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_*_cfi_allocatable
    interface
        subroutine c_get_const_string_ptr_alloc_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_ptr_alloc_CFI")
            implicit none
            character(len=:), intent(OUT), allocatable :: SHT_rv
        end subroutine c_get_const_string_ptr_alloc_cfi
    end interface

    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrOwnsAlloc +owner(caller)
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Requested: c_function_string_*_allocatable
    ! Match:     c_function_string_*
    interface
        function c_get_const_string_ptr_owns_alloc() &
                result(SHT_rv) &
                bind(C, name="STR_get_const_string_ptr_owns_alloc")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_const_string_ptr_owns_alloc
    end interface

    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrOwnsAlloc +owner(caller)
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_*_cfi_allocatable
    interface
        subroutine c_get_const_string_ptr_owns_alloc_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_ptr_owns_alloc_CFI")
            implicit none
            character(len=:), intent(OUT), allocatable :: SHT_rv
        end subroutine c_get_const_string_ptr_owns_alloc_cfi
    end interface

    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrOwnsAllocPattern +free_pattern(C_string_free)+owner(caller)
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Requested: c_function_string_*_allocatable
    ! Match:     c_function_string_*
    interface
        function c_get_const_string_ptr_owns_alloc_pattern() &
                result(SHT_rv) &
                bind(C, name="STR_get_const_string_ptr_owns_alloc_pattern")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_const_string_ptr_owns_alloc_pattern
    end interface

    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrOwnsAllocPattern +free_pattern(C_string_free)+owner(caller)
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_*_cfi_allocatable
    interface
        subroutine c_get_const_string_ptr_owns_alloc_pattern_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_ptr_owns_alloc_pattern_CFI")
            implicit none
            character(len=:), intent(OUT), allocatable :: SHT_rv
        end subroutine c_get_const_string_ptr_owns_alloc_pattern_cfi
    end interface

#ifdef HAVE_CHARACTER_POINTER_FUNCTION
    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrPointer +deref(pointer)+owner(library)
    ! Attrs:     +deref(pointer)+intent(function)
    ! Requested: c_function_string_*_pointer
    ! Match:     c_function_string_*
    interface
        function c_get_const_string_ptr_pointer() &
                result(SHT_rv) &
                bind(C, name="STR_get_const_string_ptr_pointer")
            use iso_c_binding, only : C_PTR
            implicit none
            type(C_PTR) SHT_rv
        end function c_get_const_string_ptr_pointer
    end interface
#endif

#ifdef HAVE_CHARACTER_POINTER_FUNCTION
    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrPointer +deref(pointer)+owner(library)
    ! Attrs:     +api(cfi)+deref(pointer)+intent(function)
    ! Exact:     c_function_string_*_cfi_pointer
    interface
        subroutine c_get_const_string_ptr_pointer_cfi(SHT_rv) &
                bind(C, name="STR_get_const_string_ptr_pointer_CFI")
            implicit none
            character(len=:), intent(OUT), pointer :: SHT_rv
        end subroutine c_get_const_string_ptr_pointer_cfi
    end interface
#endif

    ! ----------------------------------------
    ! Function:  void acceptStringConstReference
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  const std::string & arg1
    ! Attrs:     +intent(in)
    ! Exact:     c_in_string_&
    interface
        subroutine c_accept_string_const_reference(arg1) &
                bind(C, name="STR_accept_string_const_reference")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(IN) :: arg1(*)
        end subroutine c_accept_string_const_reference
    end interface

    ! ----------------------------------------
    ! Function:  void acceptStringConstReference
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  const std::string & arg1
    ! Attrs:     +api(cfi)+intent(in)
    ! Exact:     c_in_string_&_cfi
    interface
        subroutine accept_string_const_reference(arg1) &
                bind(C, name="STR_accept_string_const_reference_CFI")
            implicit none
            character(len=*), intent(IN) :: arg1
        end subroutine accept_string_const_reference
    end interface

    ! ----------------------------------------
    ! Function:  void acceptStringReferenceOut
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string & arg1 +intent(out)
    ! Attrs:     +intent(out)
    ! Exact:     c_out_string_&
    interface
        subroutine c_accept_string_reference_out(arg1) &
                bind(C, name="STR_accept_string_reference_out")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(OUT) :: arg1(*)
        end subroutine c_accept_string_reference_out
    end interface

    ! ----------------------------------------
    ! Function:  void acceptStringReferenceOut
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string & arg1 +intent(out)
    ! Attrs:     +api(cfi)+intent(out)
    ! Exact:     c_out_string_&_cfi
    interface
        subroutine accept_string_reference_out(arg1) &
                bind(C, name="STR_accept_string_reference_out_CFI")
            implicit none
            character(len=*), intent(OUT) :: arg1
        end subroutine accept_string_reference_out
    end interface

    ! ----------------------------------------
    ! Function:  void acceptStringReference
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string & arg1
    ! Attrs:     +intent(inout)
    ! Exact:     c_inout_string_&
    ! start c_accept_string_reference
    interface
        subroutine c_accept_string_reference(arg1) &
                bind(C, name="STR_accept_string_reference")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(INOUT) :: arg1(*)
        end subroutine c_accept_string_reference
    end interface
    ! end c_accept_string_reference

    ! ----------------------------------------
    ! Function:  void acceptStringReference
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string & arg1
    ! Attrs:     +api(cfi)+intent(inout)
    ! Exact:     c_inout_string_&_cfi
    ! start accept_string_reference
    interface
        subroutine accept_string_reference(arg1) &
                bind(C, name="STR_accept_string_reference_CFI")
            implicit none
            character(len=*), intent(INOUT) :: arg1
        end subroutine accept_string_reference
    end interface
    ! end accept_string_reference

    ! ----------------------------------------
    ! Function:  void acceptStringPointerConst
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  const std::string * arg1
    ! Attrs:     +intent(in)
    ! Exact:     c_in_string_*
    interface
        subroutine c_accept_string_pointer_const(arg1) &
                bind(C, name="STR_accept_string_pointer_const")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(IN) :: arg1(*)
        end subroutine c_accept_string_pointer_const
    end interface

    ! ----------------------------------------
    ! Function:  void acceptStringPointerConst
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  const std::string * arg1
    ! Attrs:     +api(cfi)+intent(in)
    ! Exact:     c_in_string_*_cfi
    interface
        subroutine accept_string_pointer_const(arg1) &
                bind(C, name="STR_accept_string_pointer_const_CFI")
            implicit none
            character(len=*), intent(IN) :: arg1
        end subroutine accept_string_pointer_const
    end interface

    ! ----------------------------------------
    ! Function:  void acceptStringPointer
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string * arg1
    ! Attrs:     +intent(inout)
    ! Exact:     c_inout_string_*
    interface
        subroutine c_accept_string_pointer(arg1) &
                bind(C, name="STR_accept_string_pointer")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(INOUT) :: arg1(*)
        end subroutine c_accept_string_pointer
    end interface

    ! ----------------------------------------
    ! Function:  void acceptStringPointer
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string * arg1
    ! Attrs:     +api(cfi)+intent(inout)
    ! Exact:     c_inout_string_*_cfi
    interface
        subroutine accept_string_pointer(arg1) &
                bind(C, name="STR_accept_string_pointer_CFI")
            implicit none
            character(len=*), intent(INOUT) :: arg1
        end subroutine accept_string_pointer
    end interface

    ! ----------------------------------------
    ! Function:  void fetchStringPointer
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string * arg1 +intent(out)
    ! Attrs:     +intent(out)
    ! Exact:     c_out_string_*
    interface
        subroutine c_fetch_string_pointer(arg1) &
                bind(C, name="STR_fetch_string_pointer")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(OUT) :: arg1(*)
        end subroutine c_fetch_string_pointer
    end interface

    ! ----------------------------------------
    ! Function:  void fetchStringPointer
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string * arg1 +intent(out)
    ! Attrs:     +api(cfi)+intent(out)
    ! Exact:     c_out_string_*_cfi
    interface
        subroutine fetch_string_pointer(arg1) &
                bind(C, name="STR_fetch_string_pointer_CFI")
            implicit none
            character(len=*), intent(OUT) :: arg1
        end subroutine fetch_string_pointer
    end interface

    ! ----------------------------------------
    ! Function:  void acceptStringPointerLen
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string * arg1
    ! Attrs:     +intent(inout)
    ! Exact:     c_inout_string_*
    ! ----------------------------------------
    ! Argument:  int * nlen +intent(out)
    ! Attrs:     +intent(out)
    ! Requested: c_out_native_*
    ! Match:     c_default
    interface
        subroutine c_accept_string_pointer_len(arg1, nlen) &
                bind(C, name="STR_accept_string_pointer_len")
            use iso_c_binding, only : C_CHAR, C_INT
            implicit none
            character(kind=C_CHAR), intent(INOUT) :: arg1(*)
            integer(C_INT), intent(OUT) :: nlen
        end subroutine c_accept_string_pointer_len
    end interface

    ! ----------------------------------------
    ! Function:  void acceptStringPointerLen
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string * arg1
    ! Attrs:     +api(cfi)+intent(inout)
    ! Exact:     c_inout_string_*_cfi
    ! ----------------------------------------
    ! Argument:  int * nlen +intent(out)
    ! Attrs:     +intent(out)
    ! Requested: c_out_native_*
    ! Match:     c_default
    interface
        subroutine accept_string_pointer_len(arg1, nlen) &
                bind(C, name="STR_accept_string_pointer_len_CFI")
            use iso_c_binding, only : C_INT
            implicit none
            character(len=*), intent(INOUT) :: arg1
            integer(C_INT), intent(OUT) :: nlen
        end subroutine accept_string_pointer_len
    end interface

    ! ----------------------------------------
    ! Function:  void fetchStringPointerLen
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string * arg1 +intent(out)
    ! Attrs:     +intent(out)
    ! Exact:     c_out_string_*
    ! ----------------------------------------
    ! Argument:  int * nlen +intent(out)
    ! Attrs:     +intent(out)
    ! Requested: c_out_native_*
    ! Match:     c_default
    interface
        subroutine c_fetch_string_pointer_len(arg1, nlen) &
                bind(C, name="STR_fetch_string_pointer_len")
            use iso_c_binding, only : C_CHAR, C_INT
            implicit none
            character(kind=C_CHAR), intent(OUT) :: arg1(*)
            integer(C_INT), intent(OUT) :: nlen
        end subroutine c_fetch_string_pointer_len
    end interface

    ! ----------------------------------------
    ! Function:  void fetchStringPointerLen
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  std::string * arg1 +intent(out)
    ! Attrs:     +api(cfi)+intent(out)
    ! Exact:     c_out_string_*_cfi
    ! ----------------------------------------
    ! Argument:  int * nlen +intent(out)
    ! Attrs:     +intent(out)
    ! Requested: c_out_native_*
    ! Match:     c_default
    interface
        subroutine fetch_string_pointer_len(arg1, nlen) &
                bind(C, name="STR_fetch_string_pointer_len_CFI")
            use iso_c_binding, only : C_INT
            implicit none
            character(len=*), intent(OUT) :: arg1
            integer(C_INT), intent(OUT) :: nlen
        end subroutine fetch_string_pointer_len
    end interface

    ! ----------------------------------------
    ! Function:  int acceptStringInstance
    ! Attrs:     +intent(function)
    ! Requested: c_function_native_scalar
    ! Match:     c_function
    ! ----------------------------------------
    ! Argument:  std::string arg1 +value
    ! Attrs:     +intent(in)
    ! Exact:     c_in_string_scalar
    interface
        function c_accept_string_instance(arg1) &
                result(SHT_rv) &
                bind(C, name="STR_accept_string_instance")
            use iso_c_binding, only : C_CHAR, C_INT
            implicit none
            character(kind=C_CHAR), intent(IN) :: arg1(*)
            integer(C_INT) :: SHT_rv
        end function c_accept_string_instance
    end interface

    ! ----------------------------------------
    ! Function:  int acceptStringInstance
    ! Attrs:     +intent(function)
    ! Requested: c_function_native_scalar
    ! Match:     c_function
    ! ----------------------------------------
    ! Argument:  std::string arg1 +value
    ! Attrs:     +api(cfi)+intent(in)
    ! Exact:     c_in_string_scalar_cfi
    interface
        function accept_string_instance(arg1) &
                result(SHT_rv) &
                bind(C, name="STR_accept_string_instance_CFI")
            use iso_c_binding, only : C_INT
            implicit none
            character(len=*), intent(IN) :: arg1
            integer(C_INT) :: SHT_rv
        end function accept_string_instance
    end interface

    ! ----------------------------------------
    ! Function:  void explicit1
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * name +intent(in)+len_trim(AAlen)
    ! Attrs:     +intent(in)
    ! Requested: c_in_char_*
    ! Match:     c_default
    interface
        subroutine c_explicit1(name) &
                bind(C, name="STR_explicit1")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(IN) :: name(*)
        end subroutine c_explicit1
    end interface

    ! ----------------------------------------
    ! Function:  void explicit1
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * name +intent(in)+len_trim(AAlen)
    ! Attrs:     +api(cfi)+intent(in)
    ! Exact:     c_in_char_*_cfi
    interface
        subroutine explicit1(name) &
                bind(C, name="STR_explicit1_CFI")
            implicit none
            character(len=*), intent(IN) :: name
        end subroutine explicit1
    end interface

    ! ----------------------------------------
    ! Function:  void explicit2
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * name +intent(out)+len(AAtrim)
    ! Attrs:     +intent(out)
    ! Requested: c_out_char_*
    ! Match:     c_default
    interface
        subroutine c_explicit2(name) &
                bind(C, name="STR_explicit2")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(OUT) :: name(*)
        end subroutine c_explicit2
    end interface

    ! ----------------------------------------
    ! Function:  void explicit2
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * name +intent(out)+len(AAtrim)
    ! Attrs:     +api(cfi)+intent(out)
    ! Exact:     c_out_char_*_cfi
    interface
        subroutine explicit2(name) &
                bind(C, name="STR_explicit2_CFI")
            implicit none
            character(len=*), intent(OUT) :: name
        end subroutine explicit2
    end interface

    ! ----------------------------------------
    ! Function:  void CpassChar
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char status +value
    ! Attrs:     +intent(in)
    ! Exact:     c_in_char_scalar
    interface
        subroutine cpass_char(status) &
                bind(C, name="CpassChar")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), value, intent(IN) :: status
        end subroutine cpass_char
    end interface

    ! ----------------------------------------
    ! Function:  char CreturnChar
    ! Attrs:     +intent(function)
    ! Exact:     c_function_char_scalar
    interface
        subroutine c_creturn_char(SHT_rv) &
                bind(C, name="STR_creturn_char")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(OUT) :: SHT_rv
        end subroutine c_creturn_char
    end interface

    ! ----------------------------------------
    ! Function:  void CpassCharPtr
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * dest +intent(out)
    ! Attrs:     +intent(out)
    ! Requested: c_out_char_*
    ! Match:     c_default
    ! ----------------------------------------
    ! Argument:  const char * src +blanknull
    ! Attrs:     +intent(in)
    ! Requested: c_in_char_*
    ! Match:     c_default
    interface
        subroutine c_cpass_char_ptr(dest, src) &
                bind(C, name="CpassCharPtr")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(OUT) :: dest(*)
            character(kind=C_CHAR), intent(IN) :: src(*)
        end subroutine c_cpass_char_ptr
    end interface

    ! ----------------------------------------
    ! Function:  void CpassCharPtr
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * dest +intent(out)
    ! Attrs:     +api(cfi)+intent(out)
    ! Exact:     c_out_char_*_cfi
    ! ----------------------------------------
    ! Argument:  const char * src +blanknull
    ! Attrs:     +api(cfi)+intent(in)
    ! Exact:     c_in_char_*_cfi
    interface
        subroutine cpass_char_ptr(dest, src) &
                bind(C, name="STR_cpass_char_ptr_CFI")
            implicit none
            character(len=*), intent(OUT) :: dest
            character(len=*), intent(IN) :: src
        end subroutine cpass_char_ptr
    end interface

    ! ----------------------------------------
    ! Function:  void CpassCharPtrBlank
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * dest +intent(out)
    ! Attrs:     +intent(out)
    ! Requested: c_out_char_*
    ! Match:     c_default
    ! ----------------------------------------
    ! Argument:  const char * src
    ! Attrs:     +intent(in)
    ! Requested: c_in_char_*
    ! Match:     c_default
    interface
        subroutine c_cpass_char_ptr_blank(dest, src) &
                bind(C, name="STR_cpass_char_ptr_blank")
            use iso_c_binding, only : C_CHAR
            implicit none
            character(kind=C_CHAR), intent(OUT) :: dest(*)
            character(kind=C_CHAR), intent(IN) :: src(*)
        end subroutine c_cpass_char_ptr_blank
    end interface

    ! ----------------------------------------
    ! Function:  void CpassCharPtrBlank
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * dest +intent(out)
    ! Attrs:     +api(cfi)+intent(out)
    ! Exact:     c_out_char_*_cfi
    ! ----------------------------------------
    ! Argument:  const char * src
    ! Attrs:     +api(cfi)+intent(in)
    ! Exact:     c_in_char_*_cfi
    interface
        subroutine cpass_char_ptr_blank(dest, src) &
                bind(C, name="STR_cpass_char_ptr_blank_CFI")
            implicit none
            character(len=*), intent(OUT) :: dest
            character(len=*), intent(IN) :: src
        end subroutine cpass_char_ptr_blank
    end interface

    ! ----------------------------------------
    ! Function:  void PostDeclare
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  int * count +intent(in)+rank(1)
    ! Attrs:     +intent(in)
    ! Requested: c_in_native_*
    ! Match:     c_default
    ! ----------------------------------------
    ! Argument:  std::string & name
    ! Attrs:     +intent(inout)
    ! Exact:     c_inout_string_&
    interface
        subroutine c_post_declare(count, name) &
                bind(C, name="STR_post_declare")
            use iso_c_binding, only : C_CHAR, C_INT
            implicit none
            integer(C_INT), intent(IN) :: count(*)
            character(kind=C_CHAR), intent(INOUT) :: name(*)
        end subroutine c_post_declare
    end interface

    ! ----------------------------------------
    ! Function:  void PostDeclare
    ! Attrs:     +intent(subroutine)
    ! Requested: c_subroutine_void_scalar
    ! Match:     c_subroutine
    ! ----------------------------------------
    ! Argument:  int * count +intent(in)+rank(1)
    ! Attrs:     +api(cfi)+intent(in)
    ! Exact:     c_in_native_*_cfi
    ! ----------------------------------------
    ! Argument:  std::string & name
    ! Attrs:     +api(cfi)+intent(inout)
    ! Exact:     c_inout_string_&_cfi
    interface
        subroutine post_declare(count, name) &
                bind(C, name="STR_post_declare_CFI")
            use iso_c_binding, only : C_INT
            implicit none
            integer(C_INT), intent(IN) :: count(:)
            character(len=*), intent(INOUT) :: name
        end subroutine post_declare
    end interface

    ! ----------------------------------------
    ! Function:  int CpassCharPtrNotrim
    ! Attrs:     +intent(function)
    ! Requested: c_function_native_scalar
    ! Match:     c_function
    ! ----------------------------------------
    ! Argument:  const char * src
    ! Attrs:     +intent(in)
    ! Requested: c_in_char_*
    ! Match:     c_default
    interface
        function c_cpass_char_ptr_notrim(src) &
                result(SHT_rv) &
                bind(C, name="STR_cpass_char_ptr_notrim")
            use iso_c_binding, only : C_CHAR, C_INT
            implicit none
            character(kind=C_CHAR), intent(IN) :: src(*)
            integer(C_INT) :: SHT_rv
        end function c_cpass_char_ptr_notrim
    end interface

    ! ----------------------------------------
    ! Function:  int CpassCharPtrNotrim
    ! Attrs:     +intent(function)
    ! Requested: c_function_native_scalar
    ! Match:     c_function
    ! ----------------------------------------
    ! Argument:  const char * src
    ! Attrs:     +api(cfi)+intent(in)
    ! Exact:     c_in_char_*_cfi
    interface
        function cpass_char_ptr_notrim(src) &
                result(SHT_rv) &
                bind(C, name="STR_cpass_char_ptr_notrim_CFI")
            use iso_c_binding, only : C_INT
            implicit none
            character(len=*), intent(IN) :: src
            integer(C_INT) :: SHT_rv
        end function cpass_char_ptr_notrim
    end interface

    ! ----------------------------------------
    ! Function:  int CpassCharPtrCAPI
    ! Attrs:     +intent(function)
    ! Requested: c_function_native_scalar
    ! Match:     c_function
    ! ----------------------------------------
    ! Argument:  void * addr +value
    ! Attrs:     +intent(in)
    ! Requested: c_in_void_*
    ! Match:     c_default
    ! ----------------------------------------
    ! Argument:  const char * src +api(capi)
    ! Attrs:     +api(capi)+intent(in)
    ! Requested: c_in_char_*_capi
    ! Match:     c_default
    interface
        function cpass_char_ptr_capi(addr, src) &
                result(SHT_rv) &
                bind(C, name="STR_cpass_char_ptr_capi")
            use iso_c_binding, only : C_CHAR, C_INT, C_PTR
            implicit none
            type(C_PTR), value, intent(IN) :: addr
            character(kind=C_CHAR), intent(IN) :: src(*)
            integer(C_INT) :: SHT_rv
        end function cpass_char_ptr_capi
    end interface

    ! ----------------------------------------
    ! Function:  int CpassCharPtrCAPI2
    ! Attrs:     +intent(function)
    ! Requested: c_function_native_scalar
    ! Match:     c_function
    ! ----------------------------------------
    ! Argument:  const char * in
    ! Attrs:     +intent(in)
    ! Requested: c_in_char_*
    ! Match:     c_default
    ! ----------------------------------------
    ! Argument:  const char * src +api(capi)
    ! Attrs:     +api(capi)+intent(in)
    ! Requested: c_in_char_*_capi
    ! Match:     c_default
    interface
        function c_cpass_char_ptr_capi2(in, src) &
                result(SHT_rv) &
                bind(C, name="STR_cpass_char_ptr_capi2")
            use iso_c_binding, only : C_CHAR, C_INT
            implicit none
            character(kind=C_CHAR), intent(IN) :: in(*)
            character(kind=C_CHAR), intent(IN) :: src(*)
            integer(C_INT) :: SHT_rv
        end function c_cpass_char_ptr_capi2
    end interface

    ! ----------------------------------------
    ! Function:  int CpassCharPtrCAPI2
    ! Attrs:     +intent(function)
    ! Requested: c_function_native_scalar
    ! Match:     c_function
    ! ----------------------------------------
    ! Argument:  const char * in
    ! Attrs:     +api(cfi)+intent(in)
    ! Exact:     c_in_char_*_cfi
    ! ----------------------------------------
    ! Argument:  const char * src +api(capi)
    ! Attrs:     +api(capi)+intent(in)
    ! Requested: c_in_char_*_capi
    ! Match:     c_default
    interface
        function cpass_char_ptr_capi2(in, src) &
                result(SHT_rv) &
                bind(C, name="STR_cpass_char_ptr_capi2_CFI")
            use iso_c_binding, only : C_CHAR, C_INT
            implicit none
            character(len=*), intent(IN) :: in
            character(kind=C_CHAR), intent(IN) :: src(*)
            integer(C_INT) :: SHT_rv
        end function cpass_char_ptr_capi2
    end interface

    interface
        ! splicer begin additional_interfaces
        ! splicer end additional_interfaces
    end interface

contains

    ! ----------------------------------------
    ! Function:  void passCharForce
    ! Attrs:     +intent(subroutine)
    ! Exact:     f_subroutine
    ! Attrs:     +intent(subroutine)
    ! Exact:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char status +value
    ! Attrs:     +intent(in)
    ! Exact:     f_in_char_scalar
    ! Attrs:     +intent(in)
    ! Exact:     c_in_char_scalar
    !>
    !! By default no Fortran wrapper is created.
    !! Force one so it can be tested.
    !<
    subroutine pass_char_force(status)
        character, value, intent(IN) :: status
        ! splicer begin function.pass_char_force
        call c_pass_char_force(status)
        ! splicer end function.pass_char_force
    end subroutine pass_char_force

    ! ----------------------------------------
    ! Function:  char returnChar
    ! Attrs:     +intent(function)
    ! Exact:     f_function_char_scalar
    ! Attrs:     +intent(function)
    ! Exact:     c_function_char_scalar
    !>
    !! \brief return a char argument (non-pointer)
    !!
    !<
    function return_char() &
            result(SHT_rv)
        character :: SHT_rv
        ! splicer begin function.return_char
        call c_return_char(SHT_rv)
        ! splicer end function.return_char
    end function return_char

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const char * getCharPtr1
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Exact:     f_function_char_*_cfi_allocatable
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_char_*_cfi_allocatable
    !>
    !! \brief return a 'const char *' as character(*)
    !!
    !<
    ! start get_char_ptr1
    function get_char_ptr1() &
            result(SHT_rv)
        character(len=:), allocatable :: SHT_rv
        ! splicer begin function.get_char_ptr1
        call c_get_char_ptr1_cfi(SHT_rv)
        ! splicer end function.get_char_ptr1
    end function get_char_ptr1
    ! end get_char_ptr1

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const char * getCharPtr2 +len(30)
    ! Attrs:     +deref(copy)+intent(function)
    ! Requested: f_function_char_*_cfi_copy
    ! Match:     f_function_char_*_cfi
    ! Attrs:     +api(cfi)+deref(copy)+intent(function)
    ! Requested: c_function_char_*_cfi_copy
    ! Match:     c_function_char_*_cfi
    !>
    !! \brief return 'const char *' with fixed size (len=30)
    !!
    !<
    ! start get_char_ptr2
    function get_char_ptr2() &
            result(SHT_rv)
        character(len=30) :: SHT_rv
        ! splicer begin function.get_char_ptr2
        call c_get_char_ptr2_cfi(SHT_rv)
        ! splicer end function.get_char_ptr2
    end function get_char_ptr2
    ! end get_char_ptr2

    ! Generated by arg_to_cfi - arg_to_cfi
    ! ----------------------------------------
    ! Function:  void getCharPtr3
    ! Attrs:     +intent(subroutine)
    ! Exact:     f_subroutine
    ! Attrs:     +intent(subroutine)
    ! Exact:     c_subroutine
    ! ----------------------------------------
    ! Argument:  char * output
    ! Attrs:     +api(cfi)+deref(result)+intent(out)+is_result
    ! Requested: f_function_char_*_cfi_result
    ! Match:     f_function_char_*_cfi
    ! Attrs:     +api(cfi)+deref(result)+intent(out)+is_result
    ! Requested: c_function_char_*_cfi_result
    ! Match:     c_function_char_*_cfi
    !>
    !! \brief return a 'const char *' as argument
    !!
    !<
    ! start get_char_ptr3
    subroutine get_char_ptr3(output)
        character(len=*), intent(OUT) :: output
        ! splicer begin function.get_char_ptr3
        call c_get_char_ptr3_cfi(output)
        ! splicer end function.get_char_ptr3
    end subroutine get_char_ptr3
    ! end get_char_ptr3

#ifdef HAVE_CHARACTER_POINTER_FUNCTION
    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const char * getCharPtr5 +deref(pointer)
    ! Attrs:     +deref(pointer)+intent(function)
    ! Exact:     f_function_char_*_cfi_pointer
    ! Attrs:     +api(cfi)+deref(pointer)+intent(function)
    ! Exact:     c_function_char_*_cfi_pointer
    !>
    !! \brief return a 'const char *' as character(:) pointer
    !!
    !<
    function get_char_ptr5() &
            result(SHT_rv)
        character(len=:), pointer :: SHT_rv
        ! splicer begin function.get_char_ptr5
        call c_get_char_ptr5_cfi(SHT_rv)
        ! splicer end function.get_char_ptr5
    end function get_char_ptr5
#endif

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const string getConstStringResult
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Exact:     f_function_string_scalar_cfi_allocatable
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_scalar_cfi_allocatable
    !>
    !! \brief return an ALLOCATABLE CHARACTER from std::string
    !!
    !<
    function get_const_string_result() &
            result(SHT_rv)
        character(len=:), allocatable :: SHT_rv
        ! splicer begin function.get_const_string_result
        call c_get_const_string_result_cfi(SHT_rv)
        ! splicer end function.get_const_string_result
    end function get_const_string_result

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const string getConstStringLen +len(30)
    ! Attrs:     +deref(copy)+intent(function)
    ! Requested: f_function_string_scalar_cfi_copy
    ! Match:     f_function_string_scalar_cfi
    ! Attrs:     +api(cfi)+deref(copy)+intent(function)
    ! Requested: c_function_string_scalar_cfi_copy
    ! Match:     c_function_string_scalar_cfi
    !>
    !! \brief return a 'const string' as argument
    !!
    !<
    function get_const_string_len() &
            result(SHT_rv)
        character(len=30) :: SHT_rv
        ! splicer begin function.get_const_string_len
        call c_get_const_string_len_cfi(SHT_rv)
        ! splicer end function.get_const_string_len
    end function get_const_string_len

    ! Generated by arg_to_cfi - arg_to_cfi
    ! ----------------------------------------
    ! Function:  void getConstStringAsArg
    ! Attrs:     +intent(subroutine)
    ! Exact:     f_subroutine
    ! Attrs:     +intent(subroutine)
    ! Exact:     c_subroutine
    ! ----------------------------------------
    ! Argument:  string * output
    ! Attrs:     +api(cfi)+deref(result)+intent(out)+is_result
    ! Requested: f_function_string_*_cfi_result
    ! Match:     f_function_string_*_cfi
    ! Attrs:     +api(cfi)+deref(result)+intent(out)+is_result
    ! Requested: c_function_string_*_cfi_result
    ! Match:     c_function_string_*_cfi
    !>
    !! \brief return a 'const string' as argument
    !!
    !<
    subroutine get_const_string_as_arg(output)
        character(len=*), intent(OUT) :: output
        ! splicer begin function.get_const_string_as_arg
        call c_get_const_string_as_arg_cfi(output)
        ! splicer end function.get_const_string_as_arg
    end subroutine get_const_string_as_arg

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const std::string getConstStringAlloc
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Exact:     f_function_string_scalar_cfi_allocatable
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_scalar_cfi_allocatable
    function get_const_string_alloc() &
            result(SHT_rv)
        character(len=:), allocatable :: SHT_rv
        ! splicer begin function.get_const_string_alloc
        call c_get_const_string_alloc_cfi(SHT_rv)
        ! splicer end function.get_const_string_alloc
    end function get_const_string_alloc

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const string & getConstStringRefPure
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Exact:     f_function_string_&_cfi_allocatable
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_&_cfi_allocatable
    !>
    !! \brief return a 'const string&' as ALLOCATABLE character
    !!
    !<
    ! start get_const_string_ref_pure
    function get_const_string_ref_pure() &
            result(SHT_rv)
        character(len=:), allocatable :: SHT_rv
        ! splicer begin function.get_const_string_ref_pure
        call c_get_const_string_ref_pure_cfi(SHT_rv)
        ! splicer end function.get_const_string_ref_pure
    end function get_const_string_ref_pure
    ! end get_const_string_ref_pure

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const string & getConstStringRefLen +len(30)
    ! Attrs:     +deref(copy)+intent(function)
    ! Requested: f_function_string_&_cfi_copy
    ! Match:     f_function_string_&_cfi
    ! Attrs:     +api(cfi)+deref(copy)+intent(function)
    ! Requested: c_function_string_&_cfi_copy
    ! Match:     c_function_string_&_cfi
    !>
    !! \brief return 'const string&' with fixed size (len=30)
    !!
    !! Since +len(30) is provided, the result of the function
    !! will be copied directly into memory provided by Fortran.
    !! The function will not be ALLOCATABLE.
    !<
    function get_const_string_ref_len() &
            result(SHT_rv)
        character(len=30) :: SHT_rv
        ! splicer begin function.get_const_string_ref_len
        call c_get_const_string_ref_len_cfi(SHT_rv)
        ! splicer end function.get_const_string_ref_len
    end function get_const_string_ref_len

    ! Generated by arg_to_cfi - arg_to_cfi
    ! ----------------------------------------
    ! Function:  void getConstStringRefAsArg
    ! Attrs:     +intent(subroutine)
    ! Exact:     f_subroutine
    ! Attrs:     +intent(subroutine)
    ! Exact:     c_subroutine
    ! ----------------------------------------
    ! Argument:  string & output
    ! Attrs:     +api(cfi)+deref(result)+intent(out)+is_result
    ! Requested: f_function_string_&_cfi_result
    ! Match:     f_function_string_&_cfi
    ! Attrs:     +api(cfi)+deref(result)+intent(out)+is_result
    ! Requested: c_function_string_&_cfi_result
    ! Match:     c_function_string_&_cfi
    !>
    !! \brief return a 'const string&' as argument
    !!
    !! Pass an additional argument which will be used as the return value.
    !! The length of the output variable is declared by the caller.
    !<
    subroutine get_const_string_ref_as_arg(output)
        character(len=*), intent(OUT) :: output
        ! splicer begin function.get_const_string_ref_as_arg
        call c_get_const_string_ref_as_arg_cfi(output)
        ! splicer end function.get_const_string_ref_as_arg
    end subroutine get_const_string_ref_as_arg

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const string & getConstStringRefLenEmpty +len(30)
    ! Attrs:     +deref(copy)+intent(function)
    ! Requested: f_function_string_&_cfi_copy
    ! Match:     f_function_string_&_cfi
    ! Attrs:     +api(cfi)+deref(copy)+intent(function)
    ! Requested: c_function_string_&_cfi_copy
    ! Match:     c_function_string_&_cfi
    !>
    !! \brief Test returning empty string reference
    !!
    !<
    function get_const_string_ref_len_empty() &
            result(SHT_rv)
        character(len=30) :: SHT_rv
        ! splicer begin function.get_const_string_ref_len_empty
        call c_get_const_string_ref_len_empty_cfi(SHT_rv)
        ! splicer end function.get_const_string_ref_len_empty
    end function get_const_string_ref_len_empty

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const std::string & getConstStringRefAlloc
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Exact:     f_function_string_&_cfi_allocatable
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_&_cfi_allocatable
    function get_const_string_ref_alloc() &
            result(SHT_rv)
        character(len=:), allocatable :: SHT_rv
        ! splicer begin function.get_const_string_ref_alloc
        call c_get_const_string_ref_alloc_cfi(SHT_rv)
        ! splicer end function.get_const_string_ref_alloc
    end function get_const_string_ref_alloc

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const string * getConstStringPtrLen +len(30)
    ! Attrs:     +deref(copy)+intent(function)
    ! Requested: f_function_string_*_cfi_copy
    ! Match:     f_function_string_*_cfi
    ! Attrs:     +api(cfi)+deref(copy)+intent(function)
    ! Requested: c_function_string_*_cfi_copy
    ! Match:     c_function_string_*_cfi
    !>
    !! \brief return a 'const string *' as character(30)
    !!
    !! It is the caller's responsibility to release the string
    !! created by the C++ library.
    !! This is accomplished with C_finalize_buf which is possible
    !! because +len(30) so the contents are copied before returning.
    !<
    function get_const_string_ptr_len() &
            result(SHT_rv)
        character(len=30) :: SHT_rv
        ! splicer begin function.get_const_string_ptr_len
        call c_get_const_string_ptr_len_cfi(SHT_rv)
        ! splicer end function.get_const_string_ptr_len
    end function get_const_string_ptr_len

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrAlloc +owner(library)
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Requested: f_function_string_*_cfi_allocatable_library
    ! Match:     f_function_string_*_cfi_allocatable
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_*_cfi_allocatable
    function get_const_string_ptr_alloc() &
            result(SHT_rv)
        character(len=:), allocatable :: SHT_rv
        ! splicer begin function.get_const_string_ptr_alloc
        call c_get_const_string_ptr_alloc_cfi(SHT_rv)
        ! splicer end function.get_const_string_ptr_alloc
    end function get_const_string_ptr_alloc

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrOwnsAlloc +owner(caller)
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Requested: f_function_string_*_cfi_allocatable_caller
    ! Match:     f_function_string_*_cfi_allocatable
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_*_cfi_allocatable
    !>
    !! It is the caller's responsibility to release the string
    !! created by the C++ library.
    !! This is accomplished +owner(caller) which sets idtor.
    !! The contents are copied by Fortran so they must outlast
    !! the return from the C wrapper.
    !<
    function get_const_string_ptr_owns_alloc() &
            result(SHT_rv)
        character(len=:), allocatable :: SHT_rv
        ! splicer begin function.get_const_string_ptr_owns_alloc
        call c_get_const_string_ptr_owns_alloc_cfi(SHT_rv)
        ! splicer end function.get_const_string_ptr_owns_alloc
    end function get_const_string_ptr_owns_alloc

    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrOwnsAllocPattern +free_pattern(C_string_free)+owner(caller)
    ! Attrs:     +deref(allocatable)+intent(function)
    ! Requested: f_function_string_*_cfi_allocatable_caller
    ! Match:     f_function_string_*_cfi_allocatable
    ! Attrs:     +api(cfi)+deref(allocatable)+intent(function)
    ! Exact:     c_function_string_*_cfi_allocatable
    !>
    !! Similar to getConstStringPtrOwnsAlloc, but uses pattern to release memory.
    !<
    function get_const_string_ptr_owns_alloc_pattern() &
            result(SHT_rv)
        character(len=:), allocatable :: SHT_rv
        ! splicer begin function.get_const_string_ptr_owns_alloc_pattern
        call c_get_const_string_ptr_owns_alloc_pattern_cfi(SHT_rv)
        ! splicer end function.get_const_string_ptr_owns_alloc_pattern
    end function get_const_string_ptr_owns_alloc_pattern

#ifdef HAVE_CHARACTER_POINTER_FUNCTION
    ! Generated by arg_to_cfi
    ! ----------------------------------------
    ! Function:  const std::string * getConstStringPtrPointer +deref(pointer)+owner(library)
    ! Attrs:     +deref(pointer)+intent(function)
    ! Requested: f_function_string_*_cfi_pointer_library
    ! Match:     f_function_string_*_cfi_pointer
    ! Attrs:     +api(cfi)+deref(pointer)+intent(function)
    ! Exact:     c_function_string_*_cfi_pointer
    function get_const_string_ptr_pointer() &
            result(SHT_rv)
        character(len=:), pointer :: SHT_rv
        ! splicer begin function.get_const_string_ptr_pointer
        call c_get_const_string_ptr_pointer_cfi(SHT_rv)
        ! splicer end function.get_const_string_ptr_pointer
    end function get_const_string_ptr_pointer
#endif

    ! ----------------------------------------
    ! Function:  char CreturnChar
    ! Attrs:     +intent(function)
    ! Exact:     f_function_char_scalar
    ! Attrs:     +intent(function)
    ! Exact:     c_function_char_scalar
    !>
    !! \brief return a char argument (non-pointer), extern "C"
    !!
    !<
    function creturn_char() &
            result(SHT_rv)
        character :: SHT_rv
        ! splicer begin function.creturn_char
        call c_creturn_char(SHT_rv)
        ! splicer end function.creturn_char
    end function creturn_char

    ! splicer begin additional_functions
    ! splicer end additional_functions

end module strings_mod
