00001 #ifndef GAUDIKERNEL_STATEMACHINE_H_
00002 #define GAUDIKERNEL_STATEMACHINE_H_
00003
00004 #include "GaudiKernel/GaudiException.h"
00005
00006 namespace Gaudi {
00007 namespace StateMachine {
00012 enum State {
00013 OFFLINE,
00014 CONFIGURED,
00015 INITIALIZED,
00016 RUNNING
00017
00018 };
00019
00023 enum Transition {
00024 CONFIGURE,
00025 INITIALIZE,
00026 START,
00027 STOP,
00028 FINALIZE,
00029 TERMINATE
00030 };
00031
00036 State ChangeState(const Transition transition, const State state);
00037
00038 }
00039 }
00040
00042 inline std::ostream & operator << (std::ostream & s, const Gaudi::StateMachine::State &st) {
00043 switch (st) {
00044 case Gaudi::StateMachine::OFFLINE : return s << "OFFLINE";
00045 case Gaudi::StateMachine::CONFIGURED : return s << "CONFIGURED";
00046 case Gaudi::StateMachine::INITIALIZED : return s << "INITIALIZED";
00047 case Gaudi::StateMachine::RUNNING : return s << "RUNNING";
00048 }
00049 return s;
00050 }
00051
00053 inline std::ostream & operator << (std::ostream & s, const Gaudi::StateMachine::Transition &t) {
00054 switch (t) {
00055 case Gaudi::StateMachine::CONFIGURE : return s << "CONFIGURE";
00056 case Gaudi::StateMachine::INITIALIZE : return s << "INITIALIZE";
00057 case Gaudi::StateMachine::START : return s << "START";
00058 case Gaudi::StateMachine::STOP : return s << "STOP";
00059 case Gaudi::StateMachine::FINALIZE : return s << "FINALIZE";
00060 case Gaudi::StateMachine::TERMINATE : return s << "TERMINATE";
00061 }
00062 return s;
00063 }
00064
00065 #endif