| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

UpdateManagerSvc.h

Go to the documentation of this file.
00001 // $Id: UpdateManagerSvc.h,v 1.13 2009/01/16 12:03:46 ocallot Exp $
00002 #ifndef UPDATEMANAGERSVC_H
00003 #define UPDATEMANAGERSVC_H 1
00004 
00005 // Include files
00006 #include "GaudiKernel/Service.h"
00007 #include "GaudiKernel/Time.h"
00008 #include "GaudiKernel/ClassID.h"
00009 #include "GaudiKernel/IOpaqueAddress.h"
00010 #include "GaudiKernel/IIncidentListener.h"
00011 #include "GaudiKernel/MsgStream.h"
00012 
00013 #include "GaudiKernel/IUpdateManagerSvc.h"
00014 #include "GaudiKernel/UpdateManagerException.h"
00015 
00016 #include "GaudiKernel/Map.h"
00017 
00018 #include "GaudiKernel/HashMap.h"
00019 
00020 #include <string>
00021 #include <map>
00022 #include <exception>
00023 #include <algorithm>
00024 
00025 #ifndef WIN32
00026 #include <pthread.h>
00027 #endif
00028 
00029 // Forward declarations
00030 template <class TYPE> class SvcFactory;
00031 class IIncidentSvc;
00032 class IEventProcessor;
00033 class Condition;
00034 
00041 class UpdateManagerSvc: public virtual Service,
00042                         public virtual IUpdateManagerSvc,
00043                         public virtual IIncidentListener {
00044 public:
00046   UpdateManagerSvc(const std::string& name, ISvcLocator* svcloc);
00047 
00048   virtual ~UpdateManagerSvc( ); 
00049 
00054   virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvUnknown);
00055 
00057   virtual StatusCode initialize();
00058 
00060   virtual StatusCode finalize();
00061 
00063   virtual IDataProviderSvc *dataProvider() const;
00065   virtual IDetDataSvc *detDataSvc() const;
00066 
00068   virtual StatusCode newEvent();
00072   virtual StatusCode newEvent(const Gaudi::Time &evtTime);
00073 
00074   //virtual StatusCode runAll() const;
00075 
00076   virtual bool getValidity(const std::string path, Gaudi::Time& since, Gaudi::Time &until, bool path_to_db = false);
00077   virtual void setValidity(const std::string path, const Gaudi::Time& since, const Gaudi::Time &until, bool path_to_db = false);
00078 
00080   virtual void dump();
00081 
00083   virtual void acquireLock();
00085   virtual void releaseLock();
00086 
00090   virtual void purge();
00091 
00092   // ---- Implement IIncidentListener interface ----
00094   virtual void handle(const Incident &inc);
00095 
00096 protected:
00097 
00099   //  virtual StatusCode i_registerCondition(const std::string &condition, BaseObjectMemberFunction *mf);
00100 
00102   virtual void i_registerCondition(const std::string &condition, BaseObjectMemberFunction *mf,
00103                                          BasePtrSetter *ptr_dest = NULL);
00104 
00106   virtual void i_registerCondition(void *obj, BaseObjectMemberFunction *mf);
00107 
00109   virtual StatusCode i_update(void *instance);
00110 
00113   virtual void i_unregister(void *instance);
00114 
00116   virtual void i_invalidate(void *instance);
00117 
00118 private:
00119 
00120 #include "UpdateManagerSvc_Item.icpp"
00121 
00123   GaudiUtils::HashMap<std::string, Item*> m_pathMap;
00124 
00125   void insertInMap( Item* it ) {
00126     const std::pair<const std::string,Item*> tempS( it->path, it );
00127     m_pathMap.insert( tempS );
00128   }
00129 
00131   inline void link(Item* parent, BaseObjectMemberFunction *mf, Item *child);
00132 
00133   // Disconnect a parent from the child.
00134   void unlink(Item *parent, Item *child);
00135 
00137   inline Item *findItem(const std::string &path, bool is_path_to_db = false) const;
00138 
00140   inline Item *findItem(void *p) const;
00141 
00143   inline Item *findItem(BaseObjectMemberFunction *mf) const;
00144 
00146   inline void removeFromHead(Item *item);
00147 
00149   friend class SvcFactory<UpdateManagerSvc>;
00150 
00151   // ---------- data members ----------
00153   IDataProviderSvc *m_dataProvider;
00154 
00156   std::string       m_dataProviderName;
00157 
00159   std::string       m_dataProviderRootName;
00160 
00164   IDetDataSvc      *m_detDataSvc;
00165 
00167   std::string       m_detDataSvcName;
00168 
00170   IIncidentSvc     *m_incidentSvc;
00171 
00173   IEventProcessor  *m_evtProc;
00174 
00176   Item::ItemList    m_all_items;
00178   Item::ItemList    m_head_items;
00180   Gaudi::Time       m_head_since;
00182   Gaudi::Time       m_head_until;
00183 
00187   std::vector<std::string> m_conditionsOveridesDesc;
00189   GaudiUtils::Map<std::string,Condition*> m_conditionsOverides;
00190 
00193   std::string m_diaDumpFile;
00194 
00195 #ifndef WIN32
00197   pthread_mutex_t m_busy;
00198 #endif
00199 
00200 };
00201 
00202 #include "UpdateManagerSvc.icpp"
00203 
00204 #endif // UPDATEMANAGERSVC_H
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:02:42 2011 for DetDescSvc by doxygen 1.4.7