LogicalAnd.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. #include "LogicalAnd.h"
  2. #include <string.h>
  3. /*! \file Implementation of the state machine 'LogicalAnd'
  4. */
  5. LogicalAnd::LogicalAnd()
  6. {
  7. stateConfVectorPosition = 0;
  8. }
  9. LogicalAnd::~LogicalAnd()
  10. {
  11. }
  12. void LogicalAnd::init()
  13. {
  14. for (int i = 0; i < maxOrthogonalStates; ++i)
  15. stateConfVector[i] = LogicalAnd_last_state;
  16. stateConfVectorPosition = 0;
  17. clearInEvents();
  18. clearOutEvents();
  19. /* Default init sequence for statechart LogicalAnd */
  20. iface.x = 1;
  21. iface.b = false;
  22. }
  23. void LogicalAnd::enter()
  24. {
  25. /* Default enter sequence for statechart LogicalAnd */
  26. enseq_main_region_default();
  27. }
  28. void LogicalAnd::exit()
  29. {
  30. /* Default exit sequence for statechart LogicalAnd */
  31. exseq_main_region();
  32. }
  33. sc_boolean LogicalAnd::isActive() const
  34. {
  35. return stateConfVector[0] != LogicalAnd_last_state;
  36. }
  37. /*
  38. * Always returns 'false' since this state machine can never become final.
  39. */
  40. sc_boolean LogicalAnd::isFinal() const
  41. {
  42. return false;}
  43. void LogicalAnd::runCycle()
  44. {
  45. clearOutEvents();
  46. for (stateConfVectorPosition = 0;
  47. stateConfVectorPosition < maxOrthogonalStates;
  48. stateConfVectorPosition++)
  49. {
  50. switch (stateConfVector[stateConfVectorPosition])
  51. {
  52. case main_region_A :
  53. {
  54. react_main_region_A();
  55. break;
  56. }
  57. default:
  58. break;
  59. }
  60. }
  61. clearInEvents();
  62. }
  63. void LogicalAnd::clearInEvents()
  64. {
  65. }
  66. void LogicalAnd::clearOutEvents()
  67. {
  68. }
  69. sc_boolean LogicalAnd::isStateActive(LogicalAndStates state) const
  70. {
  71. switch (state)
  72. {
  73. case main_region_A :
  74. return (sc_boolean) (stateConfVector[0] == main_region_A
  75. );
  76. default: return false;
  77. }
  78. }
  79. LogicalAnd::DefaultSCI* LogicalAnd::getDefaultSCI()
  80. {
  81. return &iface;
  82. }
  83. sc_integer LogicalAnd::DefaultSCI::get_x() const
  84. {
  85. return x;
  86. }
  87. sc_integer LogicalAnd::get_x() const
  88. {
  89. return iface.x;
  90. }
  91. void LogicalAnd::DefaultSCI::set_x(sc_integer value)
  92. {
  93. x = value;
  94. }
  95. void LogicalAnd::set_x(sc_integer value)
  96. {
  97. iface.x = value;
  98. }
  99. sc_boolean LogicalAnd::DefaultSCI::get_b() const
  100. {
  101. return b;
  102. }
  103. sc_boolean LogicalAnd::get_b() const
  104. {
  105. return iface.b;
  106. }
  107. void LogicalAnd::DefaultSCI::set_b(sc_boolean value)
  108. {
  109. b = value;
  110. }
  111. void LogicalAnd::set_b(sc_boolean value)
  112. {
  113. iface.b = value;
  114. }
  115. // implementations of all internal functions
  116. sc_boolean LogicalAnd::check_main_region_A_tr0_tr0()
  117. {
  118. return iface.x == 1;
  119. }
  120. void LogicalAnd::effect_main_region_A_tr0()
  121. {
  122. exseq_main_region_A();
  123. iface.b = ((iface.x += 1) == 2 && (iface.x *= 2) == 4);
  124. enseq_main_region_A_default();
  125. }
  126. /* 'default' enter sequence for state A */
  127. void LogicalAnd::enseq_main_region_A_default()
  128. {
  129. /* 'default' enter sequence for state A */
  130. stateConfVector[0] = main_region_A;
  131. stateConfVectorPosition = 0;
  132. }
  133. /* 'default' enter sequence for region main region */
  134. void LogicalAnd::enseq_main_region_default()
  135. {
  136. /* 'default' enter sequence for region main region */
  137. react_main_region__entry_Default();
  138. }
  139. /* Default exit sequence for state A */
  140. void LogicalAnd::exseq_main_region_A()
  141. {
  142. /* Default exit sequence for state A */
  143. stateConfVector[0] = LogicalAnd_last_state;
  144. stateConfVectorPosition = 0;
  145. }
  146. /* Default exit sequence for region main region */
  147. void LogicalAnd::exseq_main_region()
  148. {
  149. /* Default exit sequence for region main region */
  150. /* Handle exit of all possible states (of LogicalAnd.main_region) at position 0... */
  151. switch(stateConfVector[ 0 ])
  152. {
  153. case main_region_A :
  154. {
  155. exseq_main_region_A();
  156. break;
  157. }
  158. default: break;
  159. }
  160. }
  161. /* The reactions of state A. */
  162. void LogicalAnd::react_main_region_A()
  163. {
  164. /* The reactions of state A. */
  165. if (check_main_region_A_tr0_tr0())
  166. {
  167. effect_main_region_A_tr0();
  168. }
  169. }
  170. /* Default react sequence for initial entry */
  171. void LogicalAnd::react_main_region__entry_Default()
  172. {
  173. /* Default react sequence for initial entry */
  174. enseq_main_region_A_default();
  175. }