Results 1 to 2 of 2

Thread: State machine implementation

  1. #1
    Join Date
    Jun 2010
    Posts
    32
    Thanks
    8
    Qt products
    Qt4
    Platforms
    Windows

    Default State machine implementation

    Hi everyone,
    I have read the article at: http://www.objectmentor.com/resource...les/umlfsm.pdf
    I have managed to compile following code:
    Qt Code:
    1. class Turnstile
    2. {
    3. public:
    4. virtual void Lock();
    5. virtual void Unlock();
    6. virtual void Thankyou();
    7. virtual void Alarm();
    8. };
    9.  
    10. class TurnstileFSM;
    11. class LockedState;
    12. class UnlockedState;
    13. class TurnstileState
    14. {
    15. public:
    16. virtual void Coin(TurnstileFSM*) = 0;
    17. virtual void Pass(TurnstileFSM*) = 0;
    18. protected:
    19. static LockedState lockedState;
    20. static UnlockedState unlockedState;
    21. };
    22.  
    23. class TurnstileFSM : public Turnstile
    24. {
    25. public:
    26. void SetState(TurnstileState* s) {itsState = s;}
    27. void Coin() {itsState->Coin(this);}
    28. void Pass() {itsState->Pass(this);}
    29. private:
    30. TurnstileState *itsState;
    31. };
    32.  
    33. class LockedState : public TurnstileState
    34. {
    35. public:
    36. virtual void Coin(TurnstileFSM* t)
    37. {
    38. // t->SetState(&unlockedState);
    39. t->Unlock();
    40. }
    41. virtual void Pass(TurnstileFSM* t)
    42. {
    43. t->Alarm();
    44. }
    45. };
    46.  
    47. class UnlockedState : public TurnstileState
    48. {
    49. public:
    50. virtual void Coin(TurnstileFSM* t)
    51. {
    52. t->Thankyou();
    53. }
    54. virtual void Pass(TurnstileFSM* t)
    55. {
    56. t->SetState(&lockedState);
    57. t->Lock();
    58. }
    59. };
    60.  
    61. LockedState TurnstileState::lockedState;
    62. UnlockedState TurnstileState::unlockedState;
    To copy to clipboard, switch view to plain text mode 

    My question is:
    1. How do I use this code? Give me an example.
    2. Why would I need to 2 global state variables:
    LockedState TurnstileState::lockedState;
    UnlockedState TurnstileState::unlockedState;

    Thanks.
    Last edited by yyiu002; 28th June 2010 at 03:28.

  2. #2
    Join Date
    Jun 2010
    Posts
    32
    Thanks
    8
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: State machine implementation

    I guess I know how it works now.

    Those 2 global variable was used to create 2 pointers for FSM to store its state.

Similar Threads

  1. Replies: 7
    Last Post: 19th April 2011, 13:20
  2. How to get this Qt state machine to work?
    By blukske in forum Qt Programming
    Replies: 0
    Last Post: 1st April 2010, 11:15
  3. Replies: 2
    Last Post: 22nd December 2009, 21:52
  4. How to design a state machine in face of non-blocking I/O?
    By piotr.dobrogost in forum Qt Programming
    Replies: 26
    Last Post: 14th August 2009, 20:48
  5. Qt State Machine Examples don't compile
    By vitalyx in forum Newbie
    Replies: 0
    Last Post: 4th April 2009, 15:19

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.