История изменений
Исправление alysnix, (текущая версия) :
все эти кон.автоматы тривиально и максимально абстрактно делаются даже на си. если какой-то там руст может сделать это лучше - бросьте в меня камень.
///тип - функция стейта.
type StateFunction...
///конкретные стейт функции
StateFunction state_fun0() {
....
if (cond) return state_fun1; ///переход на стейт1
else return state_fun2; ///переход на стейт 2
}
StateFunction state_fun1() {
....
return state_fun5; ///переход на стейт 5
}
StateFunction state_fun2() {
....
}
...
///текущий стейт
StateFunction curr_state = state_fun0; ///начинаем со стейта 0
while (! bool_exit ) {
curr_state = curr_state(); ///выполняется функция текущего стейта и возвращает новый стейт.
}
и усьо. никаких перегрузок, вирт методов, классов, просто одна переменная типа функция и набор функций стейтов. предельно понятно, компактно, быстро и все такое.
Исправление alysnix, :
все эти кон.автоматы тривиально и максимально абстрактно делаются даже на си. если какой-то там руст может сделать это лучше - бросьте в меня камень.
///тип - функция стейта.
type StateFunction...
///конкретные стейт функции
StateFunction state_fun0() {
....
if (cond) return state_fun1(); ///переход на стейт1
else return state_fun2(); ///переход на стейт 2
}
StateFunction state_fun1() {
....
return state_fun5(); ///переход на стейт 5
}
StateFunction state_fun2() {
....
}
...
///текущий стейт
StateFunction curr_state = state_fun0; ///начинаем со стейта 0
while (! bool_exit ) {
curr_state = curr_state(); ///выполняется функция текущего стейта и возвращает новый стейт.
}
и усьо. никаких перегрузок, вирт методов, классов, просто одна переменная типа функция и набор функций стейтов. предельно понятно, компактно, быстро и все такое.
Исходная версия alysnix, :
все эти кон.автоматы тривиально и максимально абстрактно делаются даже на си. если какой-то там руст может сделать это лучше - бросьте в меня камень.
///тип - функция стейта.
type StateFunction...
///конкретные стейт функции
StateFunction state_fun0() {
....
if (cond) return state_fun1(); ///переход на стейт1
else return state_fun2(); ///переход на стейт 2
}
...
StateFunction state_fun1() {
....
return state_fun5(); ///переход на стейт 5
}
StateFunction state_fun2() {
....
}
...
///текущий стейт
StateFunction curr_state = state_fun0; ///начинаем со стейта 0
while (! bool_exit ) {
curr_state = curr_state(); ///выполняется функция текущего стейта и возвращает новый стейт.
}
и усьо. никаких перегрузок, вирт методов, классов, просто одна переменная типа функция и набор функций стейтов. предельно понятно, компактно, быстро и все такое.