--- trunk/OOPSE/libmdtools/fortranWrappers.cpp 2003/09/05 21:28:52 747 +++ trunk/OOPSE/libmdtools/fortranWrappers.cpp 2003/10/28 22:25:46 836 @@ -2,47 +2,62 @@ #include "config.h" #include "fSimulation.h" -#include +#include "fortranWrappers.hpp" +// declare the actual instances of the function pointers + +makeAtype_TD makeAtype; +initFortranFF_TD initFortranFF; +set_sticky_params_TD set_sticky_params; +set_gb_pair_params_TD set_gb_pair_params; +newEAMtype_TD newEAMtype; + +// declare the functions on the fortran side + extern "C" { + + typedef void (*ffWrapFunction_TD)( makeAtype_TD p1, + initFortranFF_TD p2, + doForceLoop_TD p3, + set_sticky_params_TD p4, + set_gb_pair_params_TD p5, + newEAMtype_TD p6 ); - void F90_FUNC(wrapforcefield, WRAPFORCEFIELD) (void (*wrapFunction)(void (*p1) makeAtypeList, - void (*p2) initFortranFFList, - void (*p3) doForceLoopList, - void (*p4) set_sticky_params_List, - void (*p5) set_gb_pair_params_List, - void (*p6) newEAMtype_List) - ); + void F90_FUNC(wrapforcefield, WRAPFORCEFIELD)( ffWrapFunction_TD myWF ); - void F90_FUNC(wrapsimmod, WRAPSIMMOD) (void (*wrapFunction)(void (*p1) setFortranSimList, - void (*p2) setFortranBoxList, - void (*p3) notifyFortranCutOffList) - ); + typedef void (*smWrapFunction_TD)( setFortranSim_TD p1, + setFortranBox_TD p2, + notifyFortranCutOff_TD p3 ); + void F90_FUNC(wrapsimmod, WRAPSIMMOD) ( smWrapFunction_TD myWF ); + #ifdef IS_MPI - void F90_FUNC(wrapsimparallelmod, WRAPSIMPARALLELMOD) (void (*wrapFunction)(void (*p1) setFortranMPIlist) ); -#endif // is_mpi -} + typedef void (*spmWrapFunction_TD)( setFortranMPI_TD p1 ); + void F90_FUNC(wrapsimparallelmod, WRAPSIMPARALLELMOD)(spmWrapFunction_TD myWF); -void wrapFF( void (*p1) makeAtypeList, void (*p2) initFortranFFList, - void (*p3) doForceLoopList, void (*p4) set_sticky_params_List, - void (*p5) set_gb_pair_params_List, void (*p6) newEAMtype_List); -void (*makeAtype) makeAtypeList; -void (*initFortranFF) initFortranFFList; -void (*set_sticky_params) set_sticky_params_List; -void (*set_gb_pair_params) set_gb_pair_params_List; -void (*newEAMtype) newEAMtype_List; +#endif // is_mpi +} -void wrapSimInfo( void (*p1) setFortranSimList, void (*p2) setFortranBoxList, - void (*p3) notifyFortranCutOffList ); +// declare the functions that are defined in this file +extern "C"{ + void wrapFF(makeAtype_TD p1, + initFortranFF_TD p2, + doForceLoop_TD p3, + set_sticky_params_TD p4, + set_gb_pair_params_TD p5, + newEAMtype_TD p6 ); + void wrapSimInfo(setFortranSim_TD p1, + setFortranBox_TD p2, + notifyFortranCutOff_TD p3 ); + #ifdef IS_MPI -void wrapSimParallel(void (*p1) setFortranMPIlist ); -#endif // is_mpi + void wrapSimParallel( setFortranMPI_TD p1 ); +#endif +} - // take care of the ForceField functions ForceFields* currentFF; @@ -52,10 +67,12 @@ void wrapMeFF( ForceFields* thisFF ){ F90_FUNC(wrapforcefield, WRAPFORCEFIELD)( wrapFF ); } - -void wrapFF( void (*p1) makeAtypeList, void (*p2) initFortranFFList, - void (*p3) doForceLoopList, void (*p4) set_sticky_params_List, - void (*p5) set_gb_pair_params_List, void (*p6) newEAMtype_List){ +extern "C" void wrapFF( makeAtype_TD p1, + initFortranFF_TD p2, + doForceLoop_TD p3, + set_sticky_params_TD p4, + set_gb_pair_params_TD p5, + newEAMtype_TD p6 ){ makeAtype = p1; initFortranFF = p2; @@ -63,7 +80,6 @@ void wrapFF( void (*p1) makeAtypeList, void (*p2) init set_sticky_params = p4; set_gb_pair_params = p5; newEAMtype = p6; - } @@ -76,13 +92,17 @@ void wrapSimInfo( void (*p1) setFortranSimList, void ( F90_FUNC(wrapsimmod, WRAPSIMMOD) ( wrapSimInfo ); } -void wrapSimInfo( void (*p1) setFortranSimList, void (*p2) setFortranBoxList, - void (*p3) notifyFortranCutOffList){ + + +extern "C" void wrapSimInfo( setFortranSim_TD p1, + setFortranBox_TD p2, + notifyFortranCutOff_TD p3 ){ currentPlug->setInternal( p1, p2, p3 ); } + #ifdef IS_MPI // wrap the mpiSim functions @@ -94,10 +114,11 @@ void wrapSimParallel(void (*p1) setFortranMPIlist ){ F90_FUNC(wrapsimparallelmod, WRAPSIMPARALLELMOD) ( wrapSimParallel ); } -void wrapSimParallel(void (*p1) setFortranMPIlist ){ +extern "C" void wrapSimParallel( setFortranMPI_TD p1 ){ currentMPIsim->setInternal( p1 ); } #endif // is_mpi +