[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
7.6.2 Wisdom String Export/Import from Fortran
Dealing with FFTW’s C string export/import is a bit more painful. In
particular, the fftw_export_wisdom_to_string
function requires
you to deal with a dynamically allocated C string. To get its length,
you must define an interface to the C strlen
function, and to
deallocate it you must define an interface to C free
:
use, intrinsic :: iso_c_binding interface integer(C_INT) function strlen(s) bind(C, name='strlen') import type(C_PTR), value :: s end function strlen subroutine free(p) bind(C, name='free') import type(C_PTR), value :: p end subroutine free end interface
Given these definitions, you can then export wisdom to a Fortran character array:
character(C_CHAR), pointer :: s(:) integer(C_SIZE_T) :: slen type(C_PTR) :: p p = fftw_export_wisdom_to_string() if (.not. c_associated(p)) stop 'error exporting wisdom' slen = strlen(p) call c_f_pointer(p, s, [slen+1]) ... call free(p)
Note that slen
is the length of the C string, but the length of
the array is slen+1
because it includes the terminating null
character. (You can omit the ‘+1’ if you don’t want Fortran to
know about the null character.) The standard c_associated
function
checks whether p
is a null pointer, which is returned by
fftw_export_wisdom_to_string
if there was an error.
To import wisdom from a string, use
fftw_import_wisdom_from_string
as usual; note that the argument
of this function must be a character(C_CHAR)
that is terminated
by the C_NULL_CHAR
character, like the s
array above.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on March 17, 2014 using texi2html 5.0.