Fortran 2008: add interface for mxCreateStructMatrix

Needed by Normann.
pac-components
Sébastien Villemot 2021-09-14 17:05:07 +02:00
parent b0d2b849d8
commit 67c205e0a4
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
1 changed files with 22 additions and 0 deletions

View File

@ -229,6 +229,14 @@ module matlab_mat
end function mxIsClass_internal
! Structure
type(c_ptr) function mxCreateStructMatrix_internal(m, n, nfields, fieldnames) bind(c, name="mxCreateStructMatrix"//API_VER2)
use iso_c_binding
import :: mwSize
integer(mwSize), intent(in), value :: m, n
integer(c_int), intent(in), value :: nfields
type(c_ptr), dimension(*), intent(in) :: fieldnames
end function mxCreateStructMatrix_internal
logical(c_bool) function mxIsStruct(pm) bind(c, name="mxIsStruct"//API_VER)
use iso_c_binding
type(c_ptr), intent(in), value :: pm
@ -330,6 +338,20 @@ contains
mxIsclass = mxIsclass_internal(pm, classname // c_null_char)
end function mxIsClass
type(c_ptr) function mxCreateStructMatrix(m, n, fieldnames)
integer(mwSize), intent(in) :: m, n
character(kind=c_char, len=*), dimension(:), intent(in) :: fieldnames
character(kind=c_char, len=len(fieldnames)+1), dimension(size(fieldnames)), target :: fieldnames_zero ! Stores zero-terminated strings
type(c_ptr), dimension(size(fieldnames)) :: fieldnames_ptr ! C arrays of strings
integer :: i
do i = 1,size(fieldnames)
fieldnames_zero(i) = trim(fieldnames(i)) // c_null_char
fieldnames_ptr(i) = c_loc(fieldnames_zero(i))
end do
mxCreateStructMatrix = mxCreateStructMatrix_internal(m, n, size(fieldnames), fieldnames_ptr)
end function mxCreateStructMatrix
type(c_ptr) function mxGetField(pm, index, fieldname)
type(c_ptr), intent(in) :: pm
integer(mwIndex), intent(in) :: index