00001 // $Id: GaudiSequencer.h,v 1.5 2008/01/10 13:11:11 marcocle Exp $ 00002 #ifndef GAUDISEQUENCER_H 00003 #define GAUDISEQUENCER_H 1 00004 00005 // Include files 00006 // from Gaudi 00007 #include "GaudiAlg/GaudiAlgorithm.h" 00008 00009 // Forward declarations 00010 class ISequencerTimerTool; 00011 00018 class GaudiSequencer : public GaudiAlgorithm { 00019 public: 00021 GaudiSequencer( const std::string& name, ISvcLocator* pSvcLocator ); 00022 00023 virtual ~GaudiSequencer( ); 00024 00025 virtual StatusCode initialize(); 00026 virtual StatusCode execute (); 00027 virtual StatusCode finalize (); 00028 00029 virtual StatusCode beginRun (); 00030 virtual StatusCode endRun (); 00031 00032 void resetExecuted(); 00033 00035 void membershipHandler( Property& theProp ); 00036 00037 protected: 00038 00039 class AlgorithmEntry { 00040 public: 00042 AlgorithmEntry( Algorithm* alg ) { 00043 m_algorithm = alg; 00044 m_reverse = false; 00045 m_timer = 0; 00046 } 00047 00048 virtual ~AlgorithmEntry( ) {}; 00049 void setReverse( bool flag ) { m_reverse = flag; } 00050 00051 Algorithm* algorithm() const { return m_algorithm; } 00052 bool reverse() const { return m_reverse; } 00053 void setTimer( int nb ) { m_timer = nb; } 00054 int timer() const { return m_timer; } 00055 private: 00056 Algorithm* m_algorithm; 00057 bool m_reverse; 00058 int m_timer; 00059 }; 00060 00062 StatusCode decodeNames( ); 00063 00064 private: 00065 00067 GaudiSequencer( const GaudiSequencer& a ); 00068 00070 GaudiSequencer& operator=( const GaudiSequencer& a ); 00071 00072 StringArrayProperty m_names; 00073 std::vector<AlgorithmEntry> m_entries; 00074 bool m_modeOR; 00075 bool m_shortCircuit; 00076 00077 bool m_ignoreFilter; 00078 bool m_isInitialized; 00079 bool m_measureTime; 00080 bool m_returnOK; 00081 ISequencerTimerTool* m_timerTool; 00082 int m_timer; 00083 }; 00084 #endif // GAUDISEQUENCER_H