00001 #ifndef CalculatorFSM283545993 00002 #define CalculatorFSM283545993 00003 #include <queue> // for event queue 00004 00005 00009 class CalculatorFSM { 00010 public: 00012 enum Event { ResultRequested, 00013 Number, 00014 BinaryOp, 00015 Clear 00016 }; 00017 protected: 00018 00019 00024 virtual void saveNumber() = 0; 00031 virtual void addNumber() = 0; 00035 virtual void clear() = 0; 00040 virtual void saveOp() = 0; 00044 virtual void showResult() = 0; 00045 00046 public: 00048 enum States { Idle, 00049 EnteringFirstOperand, 00050 Result, 00051 EnteringSecondOperand 00052 }; // states 00053 00054 private: 00055 States __Y; 00056 std::queue<Event> __events; 00057 void __processEvent( Event e ); 00058 bool debug_iNtErNal_input(const char* type, const char* name, bool i); 00059 void debug_show_fsm_xml(); 00060 public: 00062 CalculatorFSM() { __Y = Idle; 00063 debug_show_fsm_xml(); 00064 } 00066 virtual ~CalculatorFSM() {} 00070 States currentState() { return __Y; } 00071 00072 00078 static const char* eventName( Event e ); 00079 00080 00087 static const char* stateName( States s ); 00088 00089 00103 void A( Event e ); 00104 }; 00105 00106 #endif