#include <iostream>
struct action
{
int counter_limit;
void (*transition)(void);
};
void state1() {
std::cout << __func__;
}
void state4() {
std::cout << __func__;
}
void state8() {
std::cout << __func__;
}
const action action_table[] =
{
{ 4, state1 },
{ 8, state4 },
{ 11, state8 },
};
int STATE =0;
void stateEval(int counter)
{
size_t size = sizeof(action_table) / sizeof(action_table[0]);
for (size_t i=0; i < size; i++)
{
const action &a = action_table[i];
if (counter < a.counter_limit)
{
a.transition();
return;
}
}
}
int main()
{
for (int counter = 0 ; counter < 11; ++counter)
stateEval(counter);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCnN0cnVjdCBhY3Rpb24KewogICAgaW50IGNvdW50ZXJfbGltaXQ7CiAgICB2b2lkICgqdHJhbnNpdGlvbikodm9pZCk7Cn07CiAKdm9pZCBzdGF0ZTEoKSB7CiAgICBzdGQ6OmNvdXQgPDwgX19mdW5jX187Cn0Kdm9pZCBzdGF0ZTQoKSB7CiAgICBzdGQ6OmNvdXQgPDwgX19mdW5jX187Cn0Kdm9pZCBzdGF0ZTgoKSB7CiAgICBzdGQ6OmNvdXQgPDwgX19mdW5jX187Cn0KIApjb25zdCBhY3Rpb24gYWN0aW9uX3RhYmxlW10gPQp7CiAgICB7IDQsIHN0YXRlMSB9LAogICAgeyA4LCBzdGF0ZTQgfSwKICAgIHsgMTEsIHN0YXRlOCB9LAp9OwogCmludCBTVEFURSA9MDsKIAp2b2lkIHN0YXRlRXZhbChpbnQgY291bnRlcikKewogICAgc2l6ZV90IHNpemUgPSBzaXplb2YoYWN0aW9uX3RhYmxlKSAvIHNpemVvZihhY3Rpb25fdGFibGVbMF0pOwogICAgZm9yIChzaXplX3QgaT0wOyBpIDwgc2l6ZTsgaSsrKQogICAgewogICAgICAgIGNvbnN0IGFjdGlvbiAmYSA9IGFjdGlvbl90YWJsZVtpXTsKICAgICAgICBpZiAoY291bnRlciA8IGEuY291bnRlcl9saW1pdCkKICAgICAgICB7CiAgICAgICAgICAgIGEudHJhbnNpdGlvbigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQp9CiAKaW50IG1haW4oKQp7CiAgZm9yIChpbnQgY291bnRlciA9IDAgOyBjb3VudGVyIDwgMTE7ICsrY291bnRlcikKICAgICAgICBzdGF0ZUV2YWwoY291bnRlcik7CiAKICAgIHJldHVybiAwOwp9