CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ServiceMaker.h
Go to the documentation of this file.
1 #ifndef FWCore_ServiceRegistry_ServiceMaker_h
2 #define FWCore_ServiceRegistry_ServiceMaker_h
3 // -*- C++ -*-
4 //
5 // Package: ServiceRegistry
6 // Class : ServiceMaker
7 //
16 //
17 // Original Author: Chris Jones
18 // Created: Mon Sep 5 13:33:00 EDT 2005
19 //
20 
21 // system include files
22 #include <memory>
23 
24 // user include files
30 
31 // forward declarations
32 
33 namespace edm {
34  class ParameterSet;
35  class ActivityRegistry;
36 
37 
38  namespace serviceregistry {
39 
40  template<class T, class TConcrete >
41  struct MakerBase {
42  typedef T interface_t;
43  typedef TConcrete concrete_t;
44  };
45 
46  template< class T, class TConcrete = T>
47  struct AllArgsMaker : public MakerBase<T,TConcrete> {
48 
49  std::auto_ptr<T> make(const edm::ParameterSet& iPS,
50  edm::ActivityRegistry& iAR) const
51  {
52  return std::auto_ptr<T>(new TConcrete(iPS, iAR));
53  }
54  };
55 
56  template< class T, class TConcrete = T>
57  struct ParameterSetMaker : public MakerBase<T,TConcrete> {
58  std::auto_ptr<T> make(const edm::ParameterSet& iPS,
59  edm::ActivityRegistry& /* iAR */) const
60  {
61  return std::auto_ptr<T>(new TConcrete(iPS));
62  }
63  };
64 
65  template< class T, class TConcrete = T>
66  struct NoArgsMaker : public MakerBase<T,TConcrete> {
67  std::auto_ptr<T> make(const edm::ParameterSet& /* iPS */,
68  edm::ActivityRegistry& /* iAR */) const
69  {
70  return std::auto_ptr<T>(new TConcrete());
71  }
72  };
73 
74 
75  template< class T, class TMaker = AllArgsMaker<T> >
77  {
78 
79 public:
81  //virtual ~ServiceMaker();
82 
83  // ---------- const member functions ---------------------
84  virtual const std::type_info& serviceType() const { return typeid(T); }
85 
86  virtual bool make(const edm::ParameterSet& iPS,
88  ServicesManager& oSM) const
89  {
90  TMaker maker;
91  std::auto_ptr<T> pService(maker.make(iPS, iAR));
92  boost::shared_ptr<ServiceWrapper<T> > ptr(new ServiceWrapper<T>(pService));
93  return oSM.put(ptr);
94  }
95 
96  virtual bool saveConfiguration() const
97  {
98  return ServiceMakerBase::testSaveConfiguration(static_cast<typename TMaker::concrete_t const *>(0));
99  }
100 
101  // ---------- static member functions --------------------
102 
103  // ---------- member functions ---------------------------
104 
105 private:
106  ServiceMaker(const ServiceMaker&); // stop default
107 
108  const ServiceMaker& operator=(const ServiceMaker&); // stop default
109 
110  // ---------- member data --------------------------------
111 
112  };
113  }
114 }
115 
116 
117 #define DEFINE_FWK_SERVICE(type) \
118 DEFINE_EDM_PLUGIN (edm::serviceregistry::ServicePluginFactory,edm::serviceregistry::ServiceMaker<type>,#type); \
119 DEFINE_DESC_FILLER_FOR_SERVICES(type, type)
120 
121 #define DEFINE_FWK_SERVICE_MAKER(concrete,maker) \
122 typedef edm::serviceregistry::ServiceMaker<maker::interface_t,maker> concrete ## _ ## _t; \
123 DEFINE_EDM_PLUGIN (edm::serviceregistry::ServicePluginFactory, concrete ## _ ## _t ,#concrete); \
124 typedef maker::concrete_t concrete ## _ ## _ ## _t; \
125 DEFINE_DESC_FILLER_FOR_SERVICES(concrete, concrete ## _ ## _ ## _t)
126 
127 #endif
std::auto_ptr< T > make(const edm::ParameterSet &iPS, edm::ActivityRegistry &) const
Definition: ServiceMaker.h:58
const ServiceMaker & operator=(const ServiceMaker &)
virtual bool saveConfiguration() const
Definition: ServiceMaker.h:96
std::auto_ptr< T > make(const edm::ParameterSet &, edm::ActivityRegistry &) const
Definition: ServiceMaker.h:67
virtual const std::type_info & serviceType() const
Definition: ServiceMaker.h:84
bool testSaveConfiguration(const SaveConfiguration *) const
edm::serviceregistry::AllArgsMaker< DTDataMonitorInterface, DTDataIntegrityTask > maker
Definition: plugins.cc:58
bool put(boost::shared_ptr< ServiceWrapper< T > > iPtr)
returns false if put fails because a service of this type already exists
std::auto_ptr< T > make(const edm::ParameterSet &iPS, edm::ActivityRegistry &iAR) const
Definition: ServiceMaker.h:49
virtual bool make(const edm::ParameterSet &iPS, edm::ActivityRegistry &iAR, ServicesManager &oSM) const
Definition: ServiceMaker.h:86