1 #ifndef _GAUDI_PLUGIN_SERVICE_H_
2 #define _GAUDI_PLUGIN_SERVICE_H_
20 #define DECLARE_FACTORY_WITH_ID(type, id, factory) \
21 _INTERNAL_DECLARE_FACTORY(type, id, factory, __LINE__)
23 #define DECLARE_FACTORY(type, factory) \
24 DECLARE_FACTORY_WITH_ID(type, \
25 ::Gaudi::PluginService::Details::demangle<type>(), factory)
27 #define DECLARE_FACTORY_WITH_CREATOR_AND_ID(type, typecreator, id, factory) \
28 _INTERNAL_DECLARE_FACTORY_WITH_CREATOR(type, typecreator, id, factory, __LINE__)
30 #define DECLARE_FACTORY_WITH_CREATOR(type, typecreator, factory) \
31 DECLARE_FACTORY_WITH_CREATOR_AND_ID(type, typecreator, \
32 ::Gaudi::PluginService::Details::demangle<type>(), factory)
34 #define DECLARE_COMPONENT(type) \
35 DECLARE_FACTORY(type, type::Factory)
37 #define DECLARE_COMPONENT_WITH_ID(type, id) \
38 DECLARE_FACTORY_WITH_ID(type, id, type::Factory)
40 namespace Gaudi {
namespace PluginService {
47 typedef R (*FuncType)();
50 const FuncType c = Details::getCreator<FuncType>(id);
51 return c ? (*c)() : 0;
56 std::ostringstream o; o << id;
62 template <
typename R,
typename A1>
71 const FuncType c = Details::getCreator<FuncType>(id);
72 return c ? (*c)(a1) : 0;
78 std::ostringstream o; o << id;
79 return create(o.str(), a1);
84 template <
typename R,
typename A1,
typename A2>
95 const FuncType c = Details::getCreator<FuncType>(id);
96 return c ? (*c)(a1, a2) : 0;
103 std::ostringstream o; o << id;
104 return create(o.str(), a1, a2);
109 template <
typename R,
typename A1,
typename A2,
typename A3>
122 const FuncType c = Details::getCreator<FuncType>(id);
123 return c ? (*c)(a1, a2, a3) : 0;
126 template <
typename T>
131 std::ostringstream o; o << id;
132 return create(o.str(), a1, a2, a3);
140 virtual const char* what()
const throw();
146 #endif //_GAUDI_PLUGIN_SERVICE_H_