EntryExitSelfTransition.cpp 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. #include "EntryExitSelfTransition.h"
  2. #include <string.h>
  3. /*! \file Implementation of the state machine 'EntryExitSelfTransition'
  4. */
  5. EntryExitSelfTransition::EntryExitSelfTransition()
  6. {
  7. stateConfVectorPosition = 0;
  8. }
  9. EntryExitSelfTransition::~EntryExitSelfTransition()
  10. {
  11. }
  12. void EntryExitSelfTransition::init()
  13. {
  14. for (int i = 0; i < maxOrthogonalStates; ++i)
  15. stateConfVector[i] = EntryExitSelfTransition_last_state;
  16. stateConfVectorPosition = 0;
  17. clearInEvents();
  18. clearOutEvents();
  19. /* Default init sequence for statechart EntryExitSelfTransition */
  20. iface.exits = 0;
  21. iface.entries = 0;
  22. }
  23. void EntryExitSelfTransition::enter()
  24. {
  25. /* Default enter sequence for statechart EntryExitSelfTransition */
  26. enseq_main_region_default();
  27. }
  28. void EntryExitSelfTransition::exit()
  29. {
  30. /* Default exit sequence for statechart EntryExitSelfTransition */
  31. exseq_main_region();
  32. }
  33. sc_boolean EntryExitSelfTransition::isActive() const
  34. {
  35. return stateConfVector[0] != EntryExitSelfTransition_last_state;
  36. }
  37. /*
  38. * Always returns 'false' since this state machine can never become final.
  39. */
  40. sc_boolean EntryExitSelfTransition::isFinal() const
  41. {
  42. return false;}
  43. void EntryExitSelfTransition::runCycle()
  44. {
  45. clearOutEvents();
  46. for (stateConfVectorPosition = 0;
  47. stateConfVectorPosition < maxOrthogonalStates;
  48. stateConfVectorPosition++)
  49. {
  50. switch (stateConfVector[stateConfVectorPosition])
  51. {
  52. case main_region_A__region0_B :
  53. {
  54. react_main_region_A__region0_B();
  55. break;
  56. }
  57. case main_region_A__region0_C :
  58. {
  59. react_main_region_A__region0_C();
  60. break;
  61. }
  62. default:
  63. break;
  64. }
  65. }
  66. clearInEvents();
  67. }
  68. void EntryExitSelfTransition::clearInEvents()
  69. {
  70. iface.e_raised = false;
  71. iface.e1_raised = false;
  72. }
  73. void EntryExitSelfTransition::clearOutEvents()
  74. {
  75. }
  76. sc_boolean EntryExitSelfTransition::isStateActive(EntryExitSelfTransitionStates state) const
  77. {
  78. switch (state)
  79. {
  80. case main_region_A :
  81. return (sc_boolean) (stateConfVector[0] >= main_region_A
  82. && stateConfVector[0] <= main_region_A__region0_C);
  83. case main_region_A__region0_B :
  84. return (sc_boolean) (stateConfVector[0] == main_region_A__region0_B
  85. );
  86. case main_region_A__region0_C :
  87. return (sc_boolean) (stateConfVector[0] == main_region_A__region0_C
  88. );
  89. default: return false;
  90. }
  91. }
  92. EntryExitSelfTransition::DefaultSCI* EntryExitSelfTransition::getDefaultSCI()
  93. {
  94. return &iface;
  95. }
  96. void EntryExitSelfTransition::DefaultSCI::raise_e()
  97. {
  98. e_raised = true;
  99. }
  100. void EntryExitSelfTransition::raise_e()
  101. {
  102. iface.raise_e();
  103. }
  104. void EntryExitSelfTransition::DefaultSCI::raise_e1()
  105. {
  106. e1_raised = true;
  107. }
  108. void EntryExitSelfTransition::raise_e1()
  109. {
  110. iface.raise_e1();
  111. }
  112. sc_integer EntryExitSelfTransition::DefaultSCI::get_exits() const
  113. {
  114. return exits;
  115. }
  116. sc_integer EntryExitSelfTransition::get_exits() const
  117. {
  118. return iface.exits;
  119. }
  120. void EntryExitSelfTransition::DefaultSCI::set_exits(sc_integer value)
  121. {
  122. exits = value;
  123. }
  124. void EntryExitSelfTransition::set_exits(sc_integer value)
  125. {
  126. iface.exits = value;
  127. }
  128. sc_integer EntryExitSelfTransition::DefaultSCI::get_entries() const
  129. {
  130. return entries;
  131. }
  132. sc_integer EntryExitSelfTransition::get_entries() const
  133. {
  134. return iface.entries;
  135. }
  136. void EntryExitSelfTransition::DefaultSCI::set_entries(sc_integer value)
  137. {
  138. entries = value;
  139. }
  140. void EntryExitSelfTransition::set_entries(sc_integer value)
  141. {
  142. iface.entries = value;
  143. }
  144. // implementations of all internal functions
  145. sc_boolean EntryExitSelfTransition::check_main_region_A_tr0_tr0()
  146. {
  147. return iface.e_raised;
  148. }
  149. sc_boolean EntryExitSelfTransition::check_main_region_A__region0_B_tr0_tr0()
  150. {
  151. return iface.e1_raised;
  152. }
  153. sc_boolean EntryExitSelfTransition::check_main_region_A__region0_C_tr0_tr0()
  154. {
  155. return iface.e1_raised;
  156. }
  157. void EntryExitSelfTransition::effect_main_region_A_tr0()
  158. {
  159. exseq_main_region_A();
  160. enact_main_region_A();
  161. enseq_main_region_A__region0_C_default();
  162. }
  163. void EntryExitSelfTransition::effect_main_region_A__region0_B_tr0()
  164. {
  165. exseq_main_region_A__region0_B();
  166. enseq_main_region_A__region0_C_default();
  167. }
  168. void EntryExitSelfTransition::effect_main_region_A__region0_C_tr0()
  169. {
  170. exseq_main_region_A();
  171. enseq_main_region_A_default();
  172. }
  173. /* Entry action for state 'A'. */
  174. void EntryExitSelfTransition::enact_main_region_A()
  175. {
  176. /* Entry action for state 'A'. */
  177. iface.entries += 1;
  178. }
  179. /* Exit action for state 'A'. */
  180. void EntryExitSelfTransition::exact_main_region_A()
  181. {
  182. /* Exit action for state 'A'. */
  183. iface.exits += 1;
  184. }
  185. /* 'default' enter sequence for state A */
  186. void EntryExitSelfTransition::enseq_main_region_A_default()
  187. {
  188. /* 'default' enter sequence for state A */
  189. enact_main_region_A();
  190. enseq_main_region_A__region0_default();
  191. }
  192. /* 'default' enter sequence for state B */
  193. void EntryExitSelfTransition::enseq_main_region_A__region0_B_default()
  194. {
  195. /* 'default' enter sequence for state B */
  196. stateConfVector[0] = main_region_A__region0_B;
  197. stateConfVectorPosition = 0;
  198. }
  199. /* 'default' enter sequence for state C */
  200. void EntryExitSelfTransition::enseq_main_region_A__region0_C_default()
  201. {
  202. /* 'default' enter sequence for state C */
  203. stateConfVector[0] = main_region_A__region0_C;
  204. stateConfVectorPosition = 0;
  205. }
  206. /* 'default' enter sequence for region main region */
  207. void EntryExitSelfTransition::enseq_main_region_default()
  208. {
  209. /* 'default' enter sequence for region main region */
  210. react_main_region__entry_Default();
  211. }
  212. /* 'default' enter sequence for region */
  213. void EntryExitSelfTransition::enseq_main_region_A__region0_default()
  214. {
  215. /* 'default' enter sequence for region */
  216. react_main_region_A__region0__entry_Default();
  217. }
  218. /* Default exit sequence for state A */
  219. void EntryExitSelfTransition::exseq_main_region_A()
  220. {
  221. /* Default exit sequence for state A */
  222. exseq_main_region_A__region0();
  223. exact_main_region_A();
  224. }
  225. /* Default exit sequence for state B */
  226. void EntryExitSelfTransition::exseq_main_region_A__region0_B()
  227. {
  228. /* Default exit sequence for state B */
  229. stateConfVector[0] = EntryExitSelfTransition_last_state;
  230. stateConfVectorPosition = 0;
  231. }
  232. /* Default exit sequence for state C */
  233. void EntryExitSelfTransition::exseq_main_region_A__region0_C()
  234. {
  235. /* Default exit sequence for state C */
  236. stateConfVector[0] = EntryExitSelfTransition_last_state;
  237. stateConfVectorPosition = 0;
  238. }
  239. /* Default exit sequence for region main region */
  240. void EntryExitSelfTransition::exseq_main_region()
  241. {
  242. /* Default exit sequence for region main region */
  243. /* Handle exit of all possible states (of EntryExitSelfTransition.main_region) at position 0... */
  244. switch(stateConfVector[ 0 ])
  245. {
  246. case main_region_A__region0_B :
  247. {
  248. exseq_main_region_A__region0_B();
  249. exact_main_region_A();
  250. break;
  251. }
  252. case main_region_A__region0_C :
  253. {
  254. exseq_main_region_A__region0_C();
  255. exact_main_region_A();
  256. break;
  257. }
  258. default: break;
  259. }
  260. }
  261. /* Default exit sequence for region */
  262. void EntryExitSelfTransition::exseq_main_region_A__region0()
  263. {
  264. /* Default exit sequence for region */
  265. /* Handle exit of all possible states (of EntryExitSelfTransition.main_region.A._region0) at position 0... */
  266. switch(stateConfVector[ 0 ])
  267. {
  268. case main_region_A__region0_B :
  269. {
  270. exseq_main_region_A__region0_B();
  271. break;
  272. }
  273. case main_region_A__region0_C :
  274. {
  275. exseq_main_region_A__region0_C();
  276. break;
  277. }
  278. default: break;
  279. }
  280. }
  281. /* The reactions of state B. */
  282. void EntryExitSelfTransition::react_main_region_A__region0_B()
  283. {
  284. /* The reactions of state B. */
  285. if (check_main_region_A_tr0_tr0())
  286. {
  287. effect_main_region_A_tr0();
  288. } else
  289. {
  290. if (check_main_region_A__region0_B_tr0_tr0())
  291. {
  292. effect_main_region_A__region0_B_tr0();
  293. }
  294. }
  295. }
  296. /* The reactions of state C. */
  297. void EntryExitSelfTransition::react_main_region_A__region0_C()
  298. {
  299. /* The reactions of state C. */
  300. if (check_main_region_A_tr0_tr0())
  301. {
  302. effect_main_region_A_tr0();
  303. } else
  304. {
  305. if (check_main_region_A__region0_C_tr0_tr0())
  306. {
  307. effect_main_region_A__region0_C_tr0();
  308. }
  309. }
  310. }
  311. /* Default react sequence for initial entry */
  312. void EntryExitSelfTransition::react_main_region__entry_Default()
  313. {
  314. /* Default react sequence for initial entry */
  315. enseq_main_region_A_default();
  316. }
  317. /* Default react sequence for initial entry */
  318. void EntryExitSelfTransition::react_main_region_A__region0__entry_Default()
  319. {
  320. /* Default react sequence for initial entry */
  321. enseq_main_region_A__region0_B_default();
  322. }