00001 00012 #ifndef ROOTIOEVTSELECTOR_H 00013 #define ROOTIOEVTSELECTOR_H 00014 00015 #include "GaudiKernel/Service.h" 00016 #include "GaudiKernel/IEvtSelector.h" 00017 00018 class IRootIOSvc; 00019 00020 class RootIOEvtSelector : virtual public Service 00021 , virtual public IEvtSelector 00022 { 00023 protected: 00024 00025 IRootIOSvc* m_rioSvc; 00026 00027 // A private class to carry around the primary entry number. 00028 class Context : public IEvtSelector::Context 00029 { 00030 const RootIOEvtSelector* m_evtSel; 00031 public: 00032 00033 // Primary "entry number", a.k.a. "event number", 00034 // a.k.a. "top level algorithm execution number" 00035 int m_entry; 00036 00037 Context(const RootIOEvtSelector* evtsel) 00038 : m_evtSel(evtsel), m_entry(-1) { } 00039 virtual ~Context() { } 00040 virtual void* identifier() const { return (void*)m_evtSel; } 00041 }; 00042 00043 public: 00044 00045 00046 RootIOEvtSelector(const std::string& name, ISvcLocator* svcloc); 00047 virtual ~RootIOEvtSelector(); 00048 00050 00058 virtual StatusCode setEntry(RootIOEvtSelector::Context& rc, int entry) const; 00059 00060 virtual StatusCode initialize(); 00061 virtual StatusCode finalize(); 00062 00063 // Satisfy IEvtSelector requirements: 00064 00070 virtual StatusCode createContext(IEvtSelector::Context*& c) const; 00071 00079 virtual StatusCode next(IEvtSelector::Context& c) const; 00080 00087 virtual StatusCode next(IEvtSelector::Context& c, int jump) const; 00088 00095 virtual StatusCode previous(IEvtSelector::Context& c) const; 00096 00103 virtual StatusCode previous(IEvtSelector::Context& c, int jump) const; 00104 00108 virtual StatusCode last(IEvtSelector::Context& refContext) const; 00109 00115 virtual StatusCode rewind(IEvtSelector::Context& c) const; 00116 00123 virtual StatusCode createAddress(const IEvtSelector::Context& c, 00124 IOpaqueAddress*& iop) const; 00125 00130 virtual StatusCode releaseContext(IEvtSelector::Context*& c) const; 00131 00139 virtual StatusCode resetCriteria(const std::string& cr, 00140 IEvtSelector::Context& c) const; 00141 00142 StatusCode queryInterface(const InterfaceID& riid,void** ppif); 00143 00144 00145 }; 00146 00147 00148 #endif // ROOTIOEVTSELECTOR_H