1: // Definition of a session that traverses a path in a state graph. 05/25/98 rj@elilabs.com 3: #ifndef __session__H__ 4: #define __session__H__ 6: class state; 8: class session { 10: public: 12: session() { // constructor 13: } 15: virtual ~session() { // destructor 16: } 19: // A typical event handler. 20: // 21: // Every possible event must have a handler as a method in the session object. 22: // Each state object in the state graph must have 3 sub-handlers for each event: 23: // a guard handler, an exit handler, and a next state handler. 24: // 25: // It is hoped that automatic tools can aid the coding of the 26: // session's event handlers, and the state's sub-handlers. 27: // 28: // nb. if any special handling of the event at the session level is required, 29: // the code to do this may be inserted at the appropriate places in the example 30: // below for the foo event. If session types exist in a class heirarchy, 31: // virtual functions may be used to implement polymorphic behaviour across 32: // members of the heirarchy. 33: // 34: // bar* foo(blatz* boz, float zot) { 35: // 36: // // Test the guard condition. 37: // if (!current_state->foo__guard(this, boz, zot)) { 38: // return event_ignored; // event not handled because of guard 39: // } 40: // 41: // // Perform the exit action associated with the event in the current state. 42: // bar* return_value = current_state->foo__exit_action(this, boz, zot); 43: // 44: // // Enter to the next state. 45: // current_state = current_state->foo__next_state(); 46: // entry_action(); 47: // 48: // return return_value; 49: // } 51: }; // end of class session 53: #endif // __session__H__