base/PlugFunction.h File Reference

Header of generic pluggable function interface definition. More...


Classes

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

Namespaces

namespace  openfluid::base

Defines

#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 BEGIN_UNITS_ORDERED_LOOP(loopid, unitclass, 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   }


Detailed Description

Header of generic pluggable function interface definition.

Author:
Jean-Christophe FABRE <fabrejc@supagro.inra.fr>
Every simulation function must : To be linked to the OpenFLUID-engine kernel, 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_UNITS_LIST_LOOP ( loopid,
ulist,
unit   ) 

Value:

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:

if (!mp_CoreData->isUnitsClassExist(unitclass)) \
    throw openfluid::base::OFException("ofelib","BEGIN_UNITS_ORDERED_LOOP","Unit class " + std::string(unitclass) + " does not exists"); \
  _M_##loopid##_UList = mp_CoreData->getUnits(unitclass)->getList(); \
  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 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_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(OFELIB_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 END_LOOP   }

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


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