else_transition.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. """
  2. Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
  3. Model name: else_transition_test
  4. """
  5. from sccd.runtime.statecharts_core import *
  6. # package "else_transition_test"
  7. class A(RuntimeClassBase):
  8. def __init__(self, controller):
  9. RuntimeClassBase.__init__(self, controller)
  10. self.semantics.big_step_maximality = StatechartSemantics.TakeMany
  11. self.semantics.internal_event_lifeline = StatechartSemantics.Queue
  12. self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
  13. self.semantics.priority = StatechartSemantics.SourceParent
  14. self.semantics.concurrency = StatechartSemantics.Single
  15. # build Statechart structure
  16. self.build_statechart_structure()
  17. # call user defined constructor
  18. A.user_defined_constructor(self)
  19. def user_defined_constructor(self):
  20. self.x = 3
  21. def user_defined_destructor(self):
  22. pass
  23. # builds Statechart structure
  24. def build_statechart_structure(self):
  25. # state <root>
  26. self.states[""] = State(0, "", self)
  27. # state /main
  28. self.states["/main"] = ParallelState(1, "/main", self)
  29. # state /main/one
  30. self.states["/main/one"] = State(2, "/main/one", self)
  31. # state /main/one/A
  32. self.states["/main/one/A"] = State(3, "/main/one/A", self)
  33. # state /main/one/B
  34. self.states["/main/one/B"] = State(4, "/main/one/B", self)
  35. self.states["/main/one/B"].setEnter(self._main_one_B_enter)
  36. self.states["/main/one/B"].setExit(self._main_one_B_exit)
  37. # state /main/one/C
  38. self.states["/main/one/C"] = State(5, "/main/one/C", self)
  39. self.states["/main/one/C"].setEnter(self._main_one_C_enter)
  40. self.states["/main/one/C"].setExit(self._main_one_C_exit)
  41. # state /main/one/D
  42. self.states["/main/one/D"] = State(6, "/main/one/D", self)
  43. self.states["/main/one/D"].setEnter(self._main_one_D_enter)
  44. # state /main/two
  45. self.states["/main/two"] = State(7, "/main/two", self)
  46. # state /main/two/A
  47. self.states["/main/two/A"] = State(8, "/main/two/A", self)
  48. # state /main/two/B
  49. self.states["/main/two/B"] = State(9, "/main/two/B", self)
  50. # add children
  51. self.states[""].addChild(self.states["/main"])
  52. self.states["/main"].addChild(self.states["/main/one"])
  53. self.states["/main"].addChild(self.states["/main/two"])
  54. self.states["/main/one"].addChild(self.states["/main/one/A"])
  55. self.states["/main/one"].addChild(self.states["/main/one/B"])
  56. self.states["/main/one"].addChild(self.states["/main/one/C"])
  57. self.states["/main/one"].addChild(self.states["/main/one/D"])
  58. self.states["/main/two"].addChild(self.states["/main/two/A"])
  59. self.states["/main/two"].addChild(self.states["/main/two/B"])
  60. self.states[""].fixTree()
  61. self.states[""].default_state = self.states["/main"]
  62. self.states["/main/one"].default_state = self.states["/main/one/A"]
  63. self.states["/main/two"].default_state = self.states["/main/two/A"]
  64. # transition /main/one/A
  65. _main_one_A_0 = Transition(self, self.states["/main/one/A"], [self.states["/main/one/B"]])
  66. _main_one_A_0.setTrigger(Event("a", None))
  67. _main_one_A_0.setGuard(self._main_one_A_0_guard)
  68. self.states["/main/one/A"].addTransition(_main_one_A_0)
  69. _main_one_A_1 = Transition(self, self.states["/main/one/A"], [self.states["/main/one/C"]])
  70. _main_one_A_1.setTrigger(Event("a", None))
  71. _main_one_A_1.setGuard(self._main_one_A_1_guard)
  72. self.states["/main/one/A"].addTransition(_main_one_A_1)
  73. # transition /main/one/B
  74. _main_one_B_0 = Transition(self, self.states["/main/one/B"], [self.states["/main/one/A"]])
  75. _main_one_B_0.setTrigger(Event("_0after"))
  76. self.states["/main/one/B"].addTransition(_main_one_B_0)
  77. # transition /main/one/C
  78. _main_one_C_0 = Transition(self, self.states["/main/one/C"], [self.states["/main/one/A"]])
  79. _main_one_C_0.setTrigger(Event("_1after"))
  80. self.states["/main/one/C"].addTransition(_main_one_C_0)
  81. # transition /main/two/A
  82. _main_two_A_0 = Transition(self, self.states["/main/two/A"], [self.states["/main/two/B"]])
  83. _main_two_A_0.setAction(self._main_two_A_0_exec)
  84. _main_two_A_0.setTrigger(None)
  85. self.states["/main/two/A"].addTransition(_main_two_A_0)
  86. def _main_one_B_enter(self):
  87. print "in B"
  88. self.addTimer(0, 0.05)
  89. def _main_one_B_exit(self):
  90. self.removeTimer(0)
  91. def _main_one_C_enter(self):
  92. print "in C"
  93. self.addTimer(1, 0.05)
  94. def _main_one_C_exit(self):
  95. self.removeTimer(1)
  96. def _main_one_D_enter(self):
  97. print "in D"
  98. def _main_one_A_0_guard(self, parameters):
  99. return self.x == 5
  100. def _main_one_A_1_guard(self, parameters):
  101. return "ELSE_GUARD"
  102. def _main_two_A_0_exec(self, parameters):
  103. self.raiseInternalEvent(Event("a", None, []))
  104. def initializeStatechart(self):
  105. # enter default state
  106. self.default_targets = self.states["/main"].getEffectiveTargetStates()
  107. RuntimeClassBase.initializeStatechart(self)
  108. class ObjectManager(ObjectManagerBase):
  109. def __init__(self, controller):
  110. ObjectManagerBase.__init__(self, controller)
  111. def instantiate(self, class_name, construct_params):
  112. if class_name == "A":
  113. instance = A(self.controller)
  114. instance.associations = {}
  115. else:
  116. raise Exception("Cannot instantiate class " + class_name)
  117. return instance
  118. class Controller(ThreadsControllerBase):
  119. def __init__(self, keep_running = None, behind_schedule_callback = None):
  120. if keep_running == None: keep_running = True
  121. if behind_schedule_callback == None: behind_schedule_callback = None
  122. ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
  123. self.object_manager.createInstance("A", [])