Fortran 2008: add interface for mxCreateStructMatrix
Needed by Normann.pac-components
parent
b0d2b849d8
commit
67c205e0a4
|
@ -229,6 +229,14 @@ module matlab_mat
|
||||||
end function mxIsClass_internal
|
end function mxIsClass_internal
|
||||||
|
|
||||||
! Structure
|
! 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)
|
logical(c_bool) function mxIsStruct(pm) bind(c, name="mxIsStruct"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
|
@ -330,6 +338,20 @@ contains
|
||||||
mxIsclass = mxIsclass_internal(pm, classname // c_null_char)
|
mxIsclass = mxIsclass_internal(pm, classname // c_null_char)
|
||||||
end function mxIsClass
|
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) function mxGetField(pm, index, fieldname)
|
||||||
type(c_ptr), intent(in) :: pm
|
type(c_ptr), intent(in) :: pm
|
||||||
integer(mwIndex), intent(in) :: index
|
integer(mwIndex), intent(in) :: index
|
||||||
|
|
Loading…
Reference in New Issue