fork download
  1. #include <iostream>
  2.  
  3. struct action
  4. {
  5. int counter_limit;
  6. void (*transition)(void);
  7. };
  8.  
  9. void state1() {
  10. std::cout << __func__;
  11. }
  12. void state4() {
  13. std::cout << __func__;
  14. }
  15. void state8() {
  16. std::cout << __func__;
  17. }
  18.  
  19. const action action_table[] =
  20. {
  21. { 4, state1 },
  22. { 8, state4 },
  23. { 11, state8 },
  24. };
  25.  
  26. int STATE =0;
  27.  
  28. void stateEval(int counter)
  29. {
  30. size_t size = sizeof(action_table) / sizeof(action_table[0]);
  31. for (size_t i=0; i < size; i++)
  32. {
  33. const action &a = action_table[i];
  34. if (counter < a.counter_limit)
  35. {
  36. a.transition();
  37. return;
  38. }
  39. }
  40. }
  41.  
  42. int main()
  43. {
  44. for (int counter = 0 ; counter < 11; ++counter)
  45. stateEval(counter);
  46.  
  47. return 0;
  48. }
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
state1state1state1state1state4state4state4state4state8state8state8