30 #ifndef _GranOO_libCore_PlugIn_hpp_
31 #define _GranOO_libCore_PlugIn_hpp_
56 #define DECLARE_STD_GRANOO_PLUGIN(T) \
58 static const bool register_granoo_plugin_; \
59 static const std::string class_ID() {return std::string(#T);}
61 #define DECLARE_STD_GRANOO_PLUGIN_ID(CLASSID) \
63 static const bool register_granoo_plugin_; \
64 static const std::string class_ID() {return std::string(CLASSID);}
66 #define DECLARE_CUSTOM_GRANOO_PLUGIN(T) \
68 static const bool register_granoo_plugin_; \
69 static const std::string class_ID() {return std::string(#T);}
71 #define DECLARE_CUSTOM_GRANOO_PLUGIN_ID(CLASSID) \
73 static const bool register_granoo_plugin_; \
74 static const std::string class_ID() {return std::string(CLASSID);}
77 #define REGISTER_GRANOO_PLUGIN(T) \
78 const bool T::register_granoo_plugin_ = Core::PlugInInterface<T>::record(__FILE__);
80 #define REGISTER_GRANOO_PLUGIN_DESC(T, desc) \
81 const bool T::register_granoo_plugin_ = Core::PlugInInterface<T>::record(__FILE__, desc);
83 #define REGISTER_GRANOO_PLUGIN_T(T) \
84 template<> const bool T::register_granoo_plugin_ = Core::PlugInInterface<T>::record(__FILE__);
86 #define REGISTER_GRANOO_PLUGIN_DESC_T(T, desc) \
87 template<> const bool T::register_granoo_plugin_ = Core::PlugInInterface<T>::record(__FILE__, desc);
103 static PlugIn&
get(
const std::string&
id,
unsigned int rank = 0);
104 static std::map< std::string, std::vector<PlugIn* > >
get_all_plugin();
106 static bool exist(
const std::string&
id,
unsigned int rank = 0);
107 static const std::string
class_ID() {
return std::string(
"PlugIn");}
110 PlugIn(
const std::string&
id);
133 GRANOO_ACCESS (every_iter ,
unsigned int ,
_every_iter );
150 static std::map< std::string, std::vector<PlugIn* > >
_all;
180 static T&
get(
unsigned int = 0);
181 static bool exist(
unsigned int rank = 0);
182 static bool record(
const std::string file,
const std::string
desc =
"");
194 static std::vector< PlugInInterface<T>* >
_all;
214 UserAssert( rank < _all.size(),
"Can't find the '" + std::string(
typeid(T).name()) +
215 "' with rank=" + std::to_string(rank));
216 return *
static_cast<T*
>(_all[rank]);
222 return (rank < _all.size());
229 _all.push_back(
this);
235 for (
unsigned int i = 0; i < _all.size(); ++i) {
237 _all.erase(_all.begin()+i);
255 const std::string pluginId = T::class_ID();
256 std::function<
PlugIn * ()> f;
#define UserAssert(condition, message)
Definition: Macro.hpp:54
Definition: ObjectFactory.hpp:99
Definition: ObjectFactory.hpp:235
static bool record(const std::string &id, std::string file_name="", std::string desc="")
Definition: ObjectFactory.hpp:276
Definition: ObjectFactory.hpp:167
Definition: PlugIn.hpp:101
bool _can_run
Definition: PlugIn.hpp:158
virtual ~PlugIn()
Definition: PlugIn.cpp:105
static std::vector< PlugIn * > get_all_plugin_vector()
Definition: PlugIn.cpp:62
bool _verbose
Definition: PlugIn.hpp:159
bool _init
Definition: PlugIn.hpp:157
virtual void run()
Definition: PlugIn.cpp:123
static PlugIn & get(const std::string &id, unsigned int rank=0)
Definition: PlugIn.cpp:50
virtual void read_xml_element(const TiXmlElement *el, bool verbose=false)
Definition: PlugIn.cpp:301
static const std::string class_ID()
Definition: PlugIn.hpp:107
PlugIn * _parent
Definition: PlugIn.hpp:156
std::chrono::microseconds _elapsed_time
Definition: PlugIn.hpp:169
void trigger_signal_run()
Definition: PlugIn.cpp:285
Math::Expression * _init_if_expr
Definition: PlugIn.hpp:168
bool is_stop() const
Definition: PlugIn.cpp:142
static std::map< std::string, std::vector< PlugIn * > > get_all_plugin()
Definition: PlugIn.cpp:57
double _step_time
Definition: PlugIn.hpp:165
void operator=(const PlugIn &)
void verbose()
Definition: PlugIn.cpp:295
virtual void init()
Definition: PlugIn.cpp:365
static bool exist(const std::string &id, unsigned int rank=0)
Definition: PlugIn.cpp:73
void unstop()
Definition: PlugIn.cpp:135
unsigned int _iter_number
Definition: PlugIn.hpp:161
Math::Expression * _trigger_if_expr
Definition: PlugIn.hpp:167
void run_and_init()
Definition: PlugIn.cpp:161
std::vector< PlugIn * > _subplugin
Definition: PlugIn.hpp:146
const std::string _ID
Definition: PlugIn.hpp:154
static std::map< std::string, std::vector< PlugIn * > > _all
Definition: PlugIn.hpp:150
bool is_trigger() const
Definition: PlugIn.cpp:147
void stop()
Definition: PlugIn.cpp:130
unsigned int _nb_outputs
Definition: PlugIn.hpp:166
unsigned int _every_iter
Definition: PlugIn.hpp:164
int get_instance_number()
Definition: PlugIn.cpp:266
double get_elapsed_time()
Definition: PlugIn.cpp:261
PlugIn * _current_subplugin
Definition: PlugIn.hpp:147
void set_tot_iter_number(unsigned int)
Definition: PlugIn.cpp:255
const std::string _description
Definition: PlugIn.hpp:155
virtual void parse_xml()
Definition: PlugIn.cpp:360
unsigned int _current_iter_number
Definition: PlugIn.hpp:160
bool _stop
Definition: PlugIn.hpp:163
double _total_time
Definition: PlugIn.hpp:162
bool is_multi_thread() const
Definition: PlugIn.cpp:376
const std::string & get_ID() const
Definition: PlugIn.hpp:112
void trigger_signal(const std::string &sigID)
Definition: PlugIn.cpp:277
Definition: PlugIn.hpp:177
static bool record(const std::string file, const std::string desc="")
Definition: PlugIn.hpp:254
static T & get(unsigned int=0)
Definition: PlugIn.hpp:213
virtual ~PlugInInterface()
Definition: PlugIn.hpp:233
void operator=(const PlugInInterface< T > &)
static bool exist(unsigned int rank=0)
Definition: PlugIn.hpp:221
PlugInInterface()
Definition: PlugIn.hpp:227
PlugInInterface(const PlugInInterface< T > &)
static PlugIn * build()
Definition: PlugIn.hpp:247
static std::vector< PlugInInterface< T > * > _all
Definition: PlugIn.hpp:194
static PlugInManager & get()
Definition: PlugInManager.cpp:45
bool record(const std::string &id, std::function< PlugIn *()>)
Definition: PlugInManager.cpp:133
Definition: Expression.hpp:46
static const char * desc
Definition: Between2SetOf.cpp:37
Definition: Common.hpp:198