All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
IUpdateManagerSvc.h
Go to the documentation of this file.
1 // $Id: IUpdateManagerSvc.h,v 1.5 2007/10/31 19:02:17 marcocle Exp $
2 #ifndef GAUDIKERNEL_IUPDATEMANAGERSVC_H
3 #define GAUDIKERNEL_IUPDATEMANAGERSVC_H 1
4 
5 // Include files
6 // from STL
7 #include <string>
8 #include <typeinfo>
9 
10 // from Gaudi
11 #include "GaudiKernel/IInterface.h"
12 
13 // forward declarations
14 class DataObject;
15 class ValidDataObject;
16 class IUpdateManagerSvc;
17 class IDataProviderSvc;
18 class IDetDataSvc;
19 namespace Gaudi { class Time; }
20 
29 public:
32 
33  virtual StatusCode operator() () const = 0;
34 
35  virtual BaseObjectMemberFunction *makeCopy() const = 0;
36 
37  virtual const std::type_info &type() const = 0;
38 
39  virtual bool match(BaseObjectMemberFunction *) const = 0;
40 
41  virtual DataObject* castToDataObject() const = 0;
42  virtual ValidDataObject* castToValidDataObject() const = 0;
43  virtual void* castToVoid() const = 0;
44 };
45 
53 template <class CallerClass>
55 public:
57  typedef StatusCode (CallerClass::*MemberFunctionType)();
58 
60  virtual ~ObjectMemberFunction() {};
61 
64  virtual StatusCode operator() () const {
65  return (m_memberFunction != NULL)?
68  }
69 
74  }
75 
77  virtual const std::type_info &type() const { return typeid(CallerClass); }
78 
80  virtual bool match(BaseObjectMemberFunction *bmf) const {
81  if ( bmf == (BaseObjectMemberFunction *)this ) return true;
82  if (type() == bmf->type()) {
83  ObjectMemberFunction * mf = dynamic_cast<ObjectMemberFunction *>(bmf);
84  return m_instance == mf->m_instance &&
86  }
87  return false;
88  }
89 
91  virtual DataObject* castToDataObject() const {
92  return dynamic_cast<DataObject*>(m_instance);
93  }
94 
96  virtual ValidDataObject* castToValidDataObject() const {
97  return dynamic_cast<ValidDataObject*>(m_instance);
98  }
99 
101  virtual void* castToVoid() const {
102  return dynamic_cast<void*>(m_instance);
103  }
104 
105 protected:
106 
108  ObjectMemberFunction(CallerClass *instance, const MemberFunctionType &mf):
109  m_instance(instance),m_memberFunction(mf){}
110 
112  CallerClass *m_instance;
113 
116 
117  friend class IUpdateManagerSvc;
118 };
119 
128 public:
130  virtual ~BasePtrSetter() {}
132  virtual void set(DataObject *) = 0;
134  virtual bool isNull() = 0;
135 };
136 
144 template<class ActualType>
145 class PtrSetter: public BasePtrSetter {
146 public:
147  typedef ActualType dest_type;
148 
151  *m_storage = NULL;
152  }
153 
155  virtual ~PtrSetter() {}
157  virtual void set(DataObject *obj) {
158  *m_storage = dynamic_cast<dest_type *>(obj);
159  }
161  virtual bool isNull() { return *m_storage == NULL; }
162 
163 private:
166 };
167 
175 class GAUDI_API IUpdateManagerSvc: virtual public IInterface {
176 public:
179 
181  virtual IDataProviderSvc *dataProvider() const = 0;
182 
184  virtual IDetDataSvc *detDataSvc() const = 0;
185 
192  template <class CallerClass>
193  inline void registerCondition(CallerClass *instance, const std::string &condition = "",
195  i_registerCondition(condition, new ObjectMemberFunction<CallerClass>(instance,mf));
196  }
197 
198  template <class CallerClass, class CondType>
199  inline void registerCondition(CallerClass *instance, const std::string &condition,
201  CondType *&condPtrDest){
202  i_registerCondition(condition, new ObjectMemberFunction<CallerClass>(instance,mf),
203  new PtrSetter<CondType>(condPtrDest));
204  }
205 
207  template <class CallerClass>
208  inline void registerCondition(CallerClass *instance, const char *condition,
210  i_registerCondition(std::string(condition), new ObjectMemberFunction<CallerClass>(instance,mf));
211  }
212 
216  template <class CallerClass, class ObjectClass>
217  inline void registerCondition(CallerClass *instance, ObjectClass *obj,
219  i_registerCondition(dynamic_cast<void*>(obj), new ObjectMemberFunction<CallerClass>(instance,mf));
220  }
221 
225  template <class CallerClass>
226  inline void unregister(CallerClass *instance) {
227  i_unregister(dynamic_cast<void*>(instance));
228  }
229 
232  template <class CallerClass>
233  inline void invalidate(CallerClass *instance) {i_invalidate(dynamic_cast<void*>(instance));}
234 
237  virtual bool getValidity(const std::string path, Gaudi::Time& since, Gaudi::Time &until, bool path_to_db = false) = 0;
238 
242  virtual void setValidity(const std::string path,
243  const Gaudi::Time& since, const Gaudi::Time &until,
244  bool path_to_db = false) = 0;
245 
247  virtual StatusCode newEvent() = 0;
251  virtual StatusCode newEvent(const Gaudi::Time &) = 0;
252 
255  template <class CallerClass>
256  inline StatusCode update(CallerClass *instance){
257  return i_update(dynamic_cast<void*>(instance));
258  }
259 
261  virtual void dump() = 0;
262 
264  virtual void acquireLock() = 0;
266  virtual void releaseLock() = 0;
267 
271  virtual void purge() = 0;
272 
277  class PythonHelper;
278 
279 protected:
280 
281  //virtual StatusCode i_registerCondition(const std::string &condition, BaseObjectMemberFunction *mf) = 0;
282  virtual void i_registerCondition(const std::string &condition, BaseObjectMemberFunction *mf,
283  BasePtrSetter *ptr_dest = NULL) = 0;
284  virtual void i_registerCondition(void *obj, BaseObjectMemberFunction *mf) = 0;
285  virtual StatusCode i_update(void *instance) = 0;
286  virtual void i_unregister(void *instance) = 0;
287  virtual void i_invalidate(void *instance) = 0;
288 
289  friend class PythonHelper;
290 
291 private:
292 
293 };
294 #endif // GAUDIKERNEL_IUPDATEMANAGERSVC_H
virtual DataObject * castToDataObject() const =0
MemberFunctionType m_memberFunction
Pointer to the member function.
virtual bool isNull()=0
tells if the internal pointer is NULL.
virtual ~BasePtrSetter()
Empty virtual destructor.
Base class to set the pointer to an object of a class derived from DataObject in a generic way...
virtual void * castToVoid() const =0
void invalidate(CallerClass *instance)
Invalidate the given object in the dependency network.
virtual ~ObjectMemberFunction()
Virtual destructor.
void unregister(CallerClass *instance)
Generic objects can be unregistered from the UpdateManagerSvc.
virtual ~BaseObjectMemberFunction()
Virtual destructor.
Templated specialization of BasePtrSetter.
virtual bool match(BaseObjectMemberFunction *) const =0
Data provider interface definition.
dest_type ** m_storage
pointer to the pointer to fill provided by the user.
virtual BaseObjectMemberFunction * makeCopy() const =0
virtual void set(DataObject *obj)
sets the internal pointer to the provided data object (with a dynamic_cast).
virtual StatusCode operator()() const =0
void registerCondition(CallerClass *instance, ObjectClass *obj, typename ObjectMemberFunction< CallerClass >::MemberFunctionType mf=NULL)
Like the first version of registerCondition, but instead declaring the dependency on a condition of t...
CallerClass * m_instance
Pointer to the object.
void registerCondition(CallerClass *instance, const std::string &condition, typename ObjectMemberFunction< CallerClass >::MemberFunctionType mf, CondType *&condPtrDest)
Based on seal::Time.
Definition: Time.h:214
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:30
virtual bool match(BaseObjectMemberFunction *bmf) const
Comparison between two BaseObjectMemberFunction instances.
Definition of the basic interface.
Definition: IInterface.h:160
Helper class implemented in the python dictionary to allow access from python to template member func...
#define DeclareInterfaceID(name, major, minor)
Macro to declare the interface ID when using the new mechanism of extending and implementing interfac...
Definition: IInterface.h:23
string dest
Definition: gaudirun.py:137
virtual ValidDataObject * castToValidDataObject() const
Cast the object to ValidDataObject.
virtual void set(DataObject *)=0
sets the internal pointer to the provided data object (with a dynamic_cast).
Interface class to the Update Manager service.
virtual const std::type_info & type() const =0
virtual DataObject * castToDataObject() const
Cast the object to DataObject.
GAUDI_API std::string path(const AIDA::IBaseHistogram *aida)
get the path in THS for AIDA histogram
PtrSetter(dest_type *&dest)
Construct a new object using the destination pointer.
StatusCode update(CallerClass *instance)
Update the given instance.
ObjectMemberFunction(CallerClass *instance, const MemberFunctionType &mf)
Standard constructor. Protected so that can be called only by itself or IUpdateManagerSvc.
This class is used by IUpdateManagerSvc to keep pairs made of a member function and a pointer to the ...
void registerCondition(CallerClass *instance, const std::string &condition="", typename ObjectMemberFunction< CallerClass >::MemberFunctionType mf=NULL)
Register an object (algorithm instance) to the service.
virtual ~PtrSetter()
Empty virtual destructor.
virtual bool isNull()
tells if the internal pointer is NULL.
StatusCode(CallerClass::* MemberFunctionType)()
MemberFunctionType is the type for a pointer to a member function of class CallerClass.
This is a number of static methods for bootstrapping the Gaudi framework.
Definition: Bootstrap.h:15
virtual const std::type_info & type() const
Returns the type_info of the CallerClass.
#define GAUDI_API
Definition: Kernel.h:108
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:31
virtual StatusCode operator()() const
Calls the member function of the object and returns the StatusCode.
virtual ValidDataObject * castToValidDataObject() const =0
Base class of ObjectMemberFunction.
void registerCondition(CallerClass *instance, const char *condition, typename ObjectMemberFunction< CallerClass >::MemberFunctionType mf=NULL)
See above. Needed to avoid conflicts with the next one.
ActualType dest_type
virtual void * castToVoid() const
Cast the object to void with dynamic_cast.
virtual BaseObjectMemberFunction * makeCopy() const
Clone method to be able to copy an ObjectMemberFunction from the BaseObjectMemberFunction interface...