[ET Trac] [Einstein Toolkit] #1502: provide equivalent of CCTK_PASS_CTOC and CCTK_PASS_FTOF between languages
Einstein Toolkit
trac-noreply at einsteintoolkit.org
Mon Dec 9 18:32:36 CST 2013
#1502: provide equivalent of CCTK_PASS_CTOC and CCTK_PASS_FTOF between languages
-------------------------+--------------------------------------------------
Reporter: rhaas | Owner:
Type: enhancement | Status: new
Priority: minor | Milestone:
Component: Cactus | Version: development version
Keywords: |
-------------------------+--------------------------------------------------
It is occasionally (such as when interfacing with legacy code) code useful
to use the equivalent of {{{CCTK_PASS_CTOF}}} and {{{CCTK_PASS_FTOC}}}.
This seems to be impossible to directly. Workarounds are declare the C
function to take {{{cGH ** p_cctkGH}}} as an argument then set up a local
{{{cGH *cctkGH = *p_cctkGH}}} before {{{DECLARE_CCTK_ARGUMENTS}}} for
{{{CCTK_PASS_FTOC}}} while for {{{CCTK_PASS_CTOF}}} one seems to have to
resort to {{{CCTK_FortranWrapper}}} and call the returned wrapper with
cctkGH and the (Fortran) function pointer.
Note: this of course suffers from combinatorial explosion of options when
Cactus starts to support Lua/Python/Tcl/Java/Forth.
It might be useful to instead provide a set of functions that allow this
to be done "officially". Something like:
{{{
call CCTK_PASSFTOC(Cfunc)
}}}
and
{{{
CCTK_PASSCTOF(CCTK_FNAME(Ffunc));
}}}
where the later is essentially
{{{
#define CCTK_PASSCTOF(fun) (CCTK_FortranWrapper(CCTK_THORNSTRING))(fun,
cctkGH)
}}}
and the former
{{{
#define CCTK_PASSFTOC(fun) CCTK_PassFtoC(fun, cctkGH)
void CCTK_FNAME(CCTK_PassFtoC)(void (*f)(cGH *cctkGH), cGH **p_cctkGH)
{
f(*p_cctkGH);
}
}}}
--
Ticket URL: <https://trac.einsteintoolkit.org/ticket/1502>
Einstein Toolkit <http://einsteintoolkit.org>
The Einstein Toolkit
More information about the Trac
mailing list