![]() |
|
|
Generated: 8 Jan 2009 |
00001 // $Header: /tmp/svngaudi/tmp.jEpFh25751/Gaudi/GaudiAlg/GaudiAlg/Sequencer.h,v 1.4 2008/06/02 14:22:04 marcocle Exp $ 00002 #ifndef ALGORITHM_SEQUENCER_H 00003 #define ALGORITHM_SEQUENCER_H 00004 00005 // Include files 00006 #include "GaudiKernel/Algorithm.h" 00007 #include "GaudiKernel/Property.h" 00008 00009 class MsgStream; 00010 00024 class Sequencer : public Algorithm { 00025 public: 00026 00030 Sequencer( const std::string& name, // The path object's name 00031 ISvcLocator* svcloc // A pointer to a service location service 00032 ); 00033 00037 virtual ~Sequencer( ); 00038 00039 /***************************** 00040 ** Public Function Members ** 00041 *****************************/ 00042 00049 virtual StatusCode initialize( ); 00050 00054 virtual StatusCode reinitialize( ); 00055 00059 virtual StatusCode start( ); 00060 00065 virtual StatusCode execute( ); 00066 00070 virtual StatusCode stop( ); 00071 00075 virtual StatusCode finalize( ); 00076 00080 virtual StatusCode beginRun( ); 00081 00085 virtual StatusCode endRun( ); 00086 00090 void resetExecuted( ); 00091 00095 virtual bool branchFilterPassed( ) const; 00096 00100 virtual StatusCode setBranchFilterPassed( bool state ); 00101 00105 virtual bool isStopOverride( ) const; 00106 00110 StatusCode append( Algorithm* pAlgorithm ); 00111 00115 StatusCode appendToBranch( Algorithm* pAlgorithm ); 00116 00126 StatusCode createAndAppend( 00127 const std::string& type, // The concrete algorithm class of the algorithm 00128 const std::string& name, // The name to be given to the algorithm 00129 Algorithm*& pAlgorithm // Set to point to the newly created algorithm object 00130 ); 00131 00141 StatusCode createAndAppendToBranch( 00142 const std::string& type, // The concrete algorithm class of the algorithm 00143 const std::string& name, // The name to be given to the algorithm 00144 Algorithm*& pAlgorithm // Set to point to the newly created algorithm object 00145 ); 00146 00150 StatusCode remove( Algorithm* pAlgorithm ); 00151 StatusCode remove( const std::string& name ); 00152 StatusCode removeFromBranch( Algorithm* pAlgorithm ); 00153 StatusCode removeFromBranch( const std::string& name ); 00154 00161 std::vector<Algorithm*>* branchAlgorithms( ) const; 00162 00164 StatusCode decodeMemberNames( ); 00165 00167 void membershipHandler( Property& theProp ); 00168 00170 StatusCode decodeBranchMemberNames( ); 00171 00173 void branchMembershipHandler( Property& theProp ); 00174 00175 protected: 00176 00180 StatusCode append( Algorithm* pAlgorithm, 00181 std::vector<Algorithm*>* theAlgs ); 00182 00192 StatusCode createAndAppend( 00193 const std::string& type, // The concrete algorithm class of the algorithm 00194 const std::string& name, // The name to be given to the algorithm 00195 Algorithm*& pAlgorithm, // Set to point to the newly created algorithm object 00196 std::vector<Algorithm*>* theAlgs 00197 ); 00198 00202 StatusCode decodeNames( StringArrayProperty& theNames, 00203 std::vector<Algorithm*>* theAlgs, 00204 std::vector<bool>& theLogic ); 00205 00209 StatusCode execute( std::vector<Algorithm*>* theAlgs, 00210 std::vector<bool>& theLogic, 00211 Algorithm*& lastAlgorithm, unsigned int first = 0 ); 00212 00216 StatusCode executeMember( Algorithm* theAlgorithm ); 00217 00222 StatusCode remove( const std::string& algname, std::vector<Algorithm*>* theAlgs ); 00223 00224 private: 00225 00226 /****************************** 00227 ** Private Function Members ** 00228 ******************************/ 00229 00233 Sequencer( const Sequencer& a ); 00234 00238 Sequencer& operator=( const Sequencer& rhs ); 00239 00240 /************************** 00241 ** Private Data Members ** 00242 **************************/ 00243 00244 StringArrayProperty m_names; // Member names 00245 std::vector<bool> m_isInverted; // Member logic inverted list 00246 StringArrayProperty m_branchNames; // Branch Member names 00247 std::vector<Algorithm*>* m_branchAlgs; // Branch algorithms 00248 std::vector<bool> m_isBranchInverted; // Branch Member logic inverted list 00249 BooleanProperty m_stopOverride; // Stop on filter failure Override flag 00250 bool m_branchFilterPassed; // Branch filter passed flag 00251 }; 00252 00253 #endif //ALGORITHM_SEQUENCER_H 00254