state.h 594 B

1234567891011121314151617181920212223242526272829303132333435
  1. #pragma once
  2. #include <string>
  3. #include <unordered_map>
  4. namespace L87 {
  5. class State;
  6. struct StateDiagram {
  7. ::std::unordered_map<::std::string, State*> states;
  8. State* initial;
  9. virtual ~StateDiagram();
  10. };
  11. }
  12. namespace L87 {
  13. struct StateDiagram;
  14. class State {
  15. protected:
  16. StateDiagram* diagram;
  17. ::std::unordered_map<::std::string, State*>& states;
  18. void auto_register();
  19. public:
  20. State(StateDiagram* _diagram);
  21. virtual bool done();
  22. virtual bool bad();
  23. public:
  24. // 具体状态必须实现
  25. virtual const char* name() = 0;
  26. virtual State* next(char input) = 0;
  27. };
  28. }