base/PlugFunction.hpp File Reference

Go to the source code of this file.

Classes

class  openfluid::base::PluggableFunction
 Abstract class for plugin interface. More...

Namespaces

namespace  openfluid
namespace  openfluid::base

Defines

#define DLLIMPORT
#define CALL
#define STRINGIFY(x)   XSTRINGIFY(x)
#define XSTRINGIFY(x)   #x
#define PLUGFUNCTION_PROC_NAME   "GetPlugFunction"
#define PLUGSIGNATURE_PROC_NAME   "GetPlugSignature"
#define PLUGSDKVERSION_PROC_NAME   "GetPlugSDKVersion"
#define DECLARE_PLUGIN_HOOKS
#define DEFINE_FUNCTION_HOOK(pluginclassname)
#define DECLARE_UNITS_ORDERED_LOOP(loopid)
#define DECLARE_GLOBAL_UNITS_ORDERED_LOOP(loopid)
#define BEGIN_UNITS_ORDERED_LOOP(loopid, unitclass, unit)
#define BEGIN_GLOBAL_UNITS_ORDERED_LOOP(loopid, unit)
#define DECLARE_UNITS_LIST_LOOP(loopid)   openfluid::core::UnitsPtrList_t::iterator _M_##loopid##_lstit;\
#define BEGIN_UNITS_LIST_LOOP(loopid, ulist, unit)
#define DECLARE_EVENT_COLLECTION_LOOP   std::list<openfluid::core::Event*>::iterator _M_EvListiter;
#define BEGIN_EVENT_COLLECTION_LOOP(evlist, evobj)
#define END_LOOP

Typedefs

typedef PluggableFunction *(* openfluid::base::GetPluggableFunctionProc )()
typedef FunctionSignature *(* openfluid::base::GetSignatureProc )()
typedef std::string(* openfluid::base::GetSDKVersionProc )()

Detailed Description

Author:
Jean-Christophe FABRE <fabrejc@supagro.inra.fr>

Every simulation function must :

To be linked to an OpenFLUID application, the simulation function must have two hooks declarations.

  extern "C"
  {
    DLLIMPORT PluggableFunction* GetPlugFunction();
    DLLIMPORT PluggableFunction* GetPlugSignature();
  };

returning the signature and an instance of the derived class inherited from the PluggableFunction class.


Define Documentation

#define BEGIN_EVENT_COLLECTION_LOOP ( evlist,
evobj   ) 
Value:
{ \
    for(_M_EvListiter=(evlist)->begin(); _M_EvListiter != (evlist)->end(); _M_EvListiter++) \
    { \
      evobj = *_M_EvListiter;

Macro for the beginning of a loop processing an event list from an event collection

Parameters:
[in] evlist pointer to a list of events
[out] evobj the current processed event
#define BEGIN_GLOBAL_UNITS_ORDERED_LOOP ( loopid,
unit   ) 
Value:
{ \
    _M_##loopid##_GUList = mp_CoreData->getUnitsGlobally(); \
    for (_M_##loopid##_ordit = _M_##loopid##_GUList->begin();_M_##loopid##_ordit != _M_##loopid##_GUList->end();++_M_##loopid##_ordit) \
    { \
      unit = (*_M_##loopid##_ordit);

Macro for the beginning of a loop processing all units, following their process order

Parameters:
[in] loopid ID of the loop, must match declaration
[out] unit pointer to a openfluid::core::Unit objects, pointing to the current processed SU
#define BEGIN_UNITS_LIST_LOOP ( loopid,
ulist,
unit   ) 
Value:
if ((ulist) != NULL) \
  { \
    for(_M_##loopid##_lstit=ulist->begin(); _M_##loopid##_lstit != ulist->end(); _M_##loopid##_lstit++) \
    { \
      unit = *_M_##loopid##_lstit; \

Macro for the beginning of a loop processing a list of units

Parameters:
[in] loopid ID of the loop, must match declaration
[in] ulist pointer to a list of openfluid::core::Unit
[out] unit pointer to a openfluid::core::Unit objects, pointing to the current processed SU
#define BEGIN_UNITS_ORDERED_LOOP ( loopid,
unitclass,
unit   ) 
Value:
_M_##loopid##_UList = mp_CoreData->getUnits(unitclass)->getList(); \
  if (_M_##loopid##_UList != NULL) \
    { \
    for (_M_##loopid##_ordit = _M_##loopid##_UList->begin();_M_##loopid##_ordit != _M_##loopid##_UList->end();++_M_##loopid##_ordit) \
    { \
      unit = &(*_M_##loopid##_ordit);

Macro for the beginning of a loop processing all units of a class, following their process order

Parameters:
[in] loopid ID of the loop, must match declaration
[in] unitclass name of the unit class
[out] unit pointer to a openfluid::core::Unit objects, pointing to the current processed SU
#define CALL
#define DECLARE_EVENT_COLLECTION_LOOP   std::list<openfluid::core::Event*>::iterator _M_EvListiter;

Macro for declaration of a loop processing events in an event collection

#define DECLARE_GLOBAL_UNITS_ORDERED_LOOP ( loopid   ) 
Value:
openfluid::core::UnitsPtrList_t::iterator _M_##loopid##_ordit;\
  openfluid::core::UnitsPtrList_t* _M_##loopid##_GUList;

Macro for declaration of a loop processing all units, following their process order

Parameters:
[in] loopid ID of the loop
#define DECLARE_PLUGIN_HOOKS
Value:
extern "C" \
  { \
    DLLIMPORT std::string GetPlugSDKVersion(); \
    DLLIMPORT openfluid::base::PluggableFunction* GetPlugFunction(); \
    DLLIMPORT openfluid::base::FunctionSignature* GetPlugSignature(); \
  }

Macro for declaration of function and signature hooks

#define DECLARE_UNITS_LIST_LOOP ( loopid   )     openfluid::core::UnitsPtrList_t::iterator _M_##loopid##_lstit;\

Macro for declaration of a loop processing a list of units

Parameters:
[in] loopid ID of the loop
#define DECLARE_UNITS_ORDERED_LOOP ( loopid   ) 
Value:
openfluid::core::UnitsList_t::iterator _M_##loopid##_ordit;\
  openfluid::core::UnitsList_t* _M_##loopid##_UList;

Macro for declaration of a loop processing all units of a class, following their process order

Parameters:
[in] loopid ID of the loop
#define DEFINE_FUNCTION_HOOK ( pluginclassname   ) 
Value:
std::string GetPlugSDKVersion() \
  { \
    return std::string(STRINGIFY(OPENFLUID_VERSION)); \
  } \
  \
  openfluid::base::PluggableFunction* GetPlugFunction() \
  { \
    return new pluginclassname(); \
  }

Macro for definition of function hook

Parameters:
[in] pluginclassname The name of the class to instanciate
#define DLLIMPORT
#define END_LOOP
Value:
} \
  }

Macro for the ending of a loop

#define PLUGFUNCTION_PROC_NAME   "GetPlugFunction"

Function hook name

#define PLUGSDKVERSION_PROC_NAME   "GetPlugSDKVersion"

SDK version hook name

#define PLUGSIGNATURE_PROC_NAME   "GetPlugSignature"

Signature hook name

#define STRINGIFY (  )     XSTRINGIFY(x)
#define XSTRINGIFY (  )     #x

Generated using Doxygen 1.6.3
Creative Commons License Creative Commons By-NC-ND license