LINUX.ORG.RU

История изменений

Исправление 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(); ///выполняется функция текущего стейта и возвращает новый стейт.
}

и усьо. никаких перегрузок, вирт методов, классов, просто одна переменная типа функция и набор функций стейтов. предельно понятно, компактно, быстро и все такое.