| The Gaudi Framework v32r1 (f65d50dc)

PluginServiceV1.h
Go to the documentation of this file.
1 #ifndef _GAUDI_PLUGIN_SERVICE_V1_H_
2 #define _GAUDI_PLUGIN_SERVICE_V1_H_
3 /*****************************************************************************\
4 * (c) Copyright 2013 CERN *
5 * *
6 * This software is distributed under the terms of the GNU General Public *
7 * Licence version 3 (GPL Version 3), copied verbatim in the file "LICENCE". *
8 * *
9 * In applying this licence, CERN does not waive the privileges and immunities *
10 * granted to it by virtue of its status as an Intergovernmental Organization *
11 * or submit itself to any jurisdiction. *
12 \*****************************************************************************/
13
16
17 #include <Gaudi/Details/PluginServiceDetailsV1.h>
18 #include <string>
19 #include <typeinfo>
20 #include <utility>
21
22 #define _PS_V1_DECLARE_FACTORY_WITH_ID( type, id, factory ) \
23 _PS_V1_INTERNAL_DECLARE_FACTORY( type, id, factory, __LINE__ )
24
25 #define _PS_V1_DECLARE_FACTORY( type, factory ) \
26 _PS_V1_DECLARE_FACTORY_WITH_ID( type, ::Gaudi::PluginService::v1::Details::demangle<type>(), factory )
27
28 #define _PS_V1_DECLARE_FACTORY_WITH_CREATOR_AND_ID( type, typecreator, id, factory ) \
29 _PS_V1_INTERNAL_DECLARE_FACTORY_WITH_CREATOR( type, typecreator, id, factory, __LINE__ )
30
31 #define _PS_V1_DECLARE_FACTORY_WITH_CREATOR( type, typecreator, factory ) \
32 _PS_V1_DECLARE_FACTORY_WITH_CREATOR_AND_ID( type, typecreator, \
33 ::Gaudi::PluginService::v1::Details::demangle<type>(), factory )
34
35 #define _PS_V1_DECLARE_COMPONENT( type ) _PS_V1_DECLARE_FACTORY( type, type::Factory )
36
37 #define _PS_V1_DECLARE_COMPONENT_WITH_ID( type, id ) _PS_V1_DECLARE_FACTORY_WITH_ID( type, id, type::Factory )
38
39 #if !GAUDI_PLUGIN_SERVICE_USE_V2
40 # define DECLARE_FACTORY_WITH_ID( type, id, factory ) _PS_V1_DECLARE_FACTORY_WITH_ID( type, id, factory )
41 # define DECLARE_FACTORY( type, factory ) _PS_V1_DECLARE_FACTORY( type, factory )
42 # define DECLARE_FACTORY_WITH_CREATOR_AND_ID( type, typecreator, id, factory ) \
43 _PS_V1_DECLARE_FACTORY_WITH_CREATOR_AND_ID( type, typecreator, id, factory )
44 # define DECLARE_FACTORY_WITH_CREATOR( type, typecreator, factory ) \
45 _PS_V1_DECLARE_FACTORY_WITH_CREATOR( type, typecreator, factory )
46 # define DECLARE_COMPONENT( type ) _PS_V1_DECLARE_COMPONENT( type )
47 # define DECLARE_COMPONENT_WITH_ID( type, id ) _PS_V1_DECLARE_COMPONENT_WITH_ID( type, id )
48 #endif
49
50 namespace Gaudi {
51 namespace PluginService {
52 GAUDI_PLUGIN_SERVICE_V1_INLINE namespace v1 {
54 template <typename R, typename... Args>
55 class Factory {
56 public:
57 typedef R ReturnType;
58 typedef R ( *FuncType )( Args&&... );
59
60 static ReturnType create( const std::string& id, Args... args ) {
61 const FuncType c = Details::getCreator<FuncType>( id );
62 return c ? ( *c )( std::forward<Args>( args )... ) : 0;
63 }
64
65 template <typename T>
66 static ReturnType create( const T& id, Args... args ) {
67 std::ostringstream o;
68 o << id;
69 return create( o.str(), std::forward<Args>( args )... );
70 }
71 };
72
73 class GAUDIPS_EXPORT Exception : public std::exception {
74 public:
75 Exception( std::string msg );
76 ~Exception() throw() override;
77 const char* what() const throw() override;
78
79 private:
80 std::string m_msg;
81 };
82 }
83 } // namespace PluginService
84 } // namespace Gaudi
85
86 #endif //_GAUDI_PLUGIN_SERVICE_H_
gaudirun.c
c
Definition: gaudirun.py:487
GAUDI_PLUGIN_SERVICE_V1_INLINE
#define GAUDI_PLUGIN_SERVICE_V1_INLINE
Definition: PluginServiceCommon.h:18
std::string
STL class.
gaudirun.args
args
Definition: gaudirun.py:307
Gaudi::PluginService::v1::Factory::create
static ReturnType create(const T &id, Args... args)
Definition: PluginServiceV1.h:66
std::ostringstream
STL class.
std::ostringstream::str
T str(T... args)
Gaudi::PluginService::v1::Factory
Class wrapping the signature for a factory with any number of arguments.
Definition: PluginServiceV1.h:55
std::exception
STL class.
Gaudi::PluginService::v1::Factory::ReturnType
R ReturnType
Definition: PluginServiceV1.h:57
Gaudi::PluginService::v1::Exception
Definition: PluginServiceV1.h:73
GAUDIPS_EXPORT
#define GAUDIPS_EXPORT
Definition: PluginServiceCommon.h:37
Gaudi::PluginService::v1::Exception::m_msg
std::string m_msg
Definition: PluginServiceV1.h:80
Gaudi::PluginService::v1::Factory::FuncType
R(* FuncType)(Args &&...)
Definition: PluginServiceV1.h:58
GaudiMP.FdsRegistry.msg
msg
Definition: FdsRegistry.py:8
PluginServiceDetailsV1.h
Gaudi
Header file for std:chrono::duration-based Counters.
Definition: __init__.py:1
Gaudi::PluginService::v1::Factory::create
static ReturnType create(const std::string &id, Args... args)
Definition: PluginServiceV1.h:60