BooleanExpressions.cpp 7.5 KB

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