else_transition.py 6.6 KB

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