Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Front-end

Boost , Meta State Machine (MSM) , Part II. Reference

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Name

Front-end — The front-end headers

msm/front/common_states.hpp

Этот заголовок содержит предопределенные типы, которые служат основой для состояний или государственных машин:

  • default_base_state: неполиморфный пустой тип.

  • polymorphic_state: тип с виртуальным деструктором, который делает все состояния полиморфными.

msm/front/completion_event.hpp

Этот заголовок содержит один тип, none. Этот тип имеет несколько значений в таблице переходов:

  • как действие или охрана: что нет действия или охраны

  • как целевое состояние: что переход является внутренним переходом

  • как событие: переход является анонимным (завершением) переходом

msm/front/functor_row.hpp

Этот заголовок реализует переходы и помощники фронтенда функтора.

Row

definition

 template <class Source,class Event,class Target,class
                                    Action,class Guard> Row {
}

tags

row_type_tag определяется по-разному для каждой специализации:

  • все 5 параметров шаблона означают нормальный переход с действием и защитой: typedef row_tag row_type_tag;

  • Row нормальный переход без действия или охраны: typedef _row_tag row_type_tag;

  • Row<Источник,Событие,Цель,Действие,Ничего>нормальный переход без охраны: typedef_row_tag row_type_tag;

  • Row нормальный переход без действия: typedef g_row_tag row_type_tag;

  • Row внутренний переход без охраны: typedef_irow_tag row_type_tag;

  • Row внутренний переход без действия: typedef g_irow_tag row_type_tag;

  • Row внутренний переход с действием и охраной: typedef irow_tag row_type_tag;

  • Row внутренний переход без действия или охраны: typedef_irow_tag row_type_tag;

methods

Как и любой другой фронтенд, Row реализует две необходимые статические функции для действия и вызова охраны. Каждая функция получает в качестве параметра (глубочайшего уровня) машину состояний, обрабатывающую событие, само событие, исходное и целевое состояния и все состояния, содержащиеся в машине состояний.

template static void action_call(); 
(Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&) ;
 
template static bool guard_call(); 
(Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&) ;
 

Internal

definition

 template <class Event,class Action,class Guard>
                                    Internal {
}

tags

row_type_tag определяется по-разному для каждой специализации:

  • все 3 параметра шаблона означают внутренний переход с действием и защитой: typedef sm_i_row_tag row_type_tag;

  • Внутренний <Событие,нет,нет>внутренний переход без действия или охраны: typedef sm__i_row_tag row_type_tag;

  • Внутренний <События, Действия,не>внутренний переход без охраны: typedef sm_a_i_row_tag row_type_tag;

  • Внутренний<Событие,нет,Страж>внутренний переход без действия: typedef sm_g_i_row_tag row_type_tag;

methods

Как и любой другой интерфейс, Internal реализует две необходимые статические функции для действий и вызова охраны. Каждая функция получает в качестве параметра (глубочайшего уровня) машину состояний, обрабатывающую событие, само событие, исходное и целевое состояния и все состояния, содержащиеся в машине состояний.

template static void action_call(); 
(Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&) ;
 
template static bool guard_call(); 
(Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&) ;
 

ActionSequence_

Этот функтор, в свою очередь, называет каждый элемент шаблонной последовательности (которые также называются функторами). Это также базовая реализация грамматики последовательности eUML (action1,action2, ...).

definition

 template <class Sequence> ActionSequence_ {
}

methods

Этот вспомогательный функтор предназначен для использования в переходной таблице и в поведении состояния и поэтому реализует оператор() с 3 и с 4 аргументами:

template operator(); 
Evt const& ,Fsm& ,SourceState& ,TargetState& ;
 

template operator(); 
Evt const&, Fsm&, State&;
 

Defer

definition

 Defer {
}

methods

Этот вспомогательный функтор предназначен для использования в переходной таблице и, следовательно, реализует оператор() с 4 аргументами:

template operator(); 
Evt const&, Fsm& , SourceState&, TargetState&;
 

msm/front/internal_row.hpp

Этот заголовок реализует внутренние переходные строки для использования внутри внутреннего стола. Все эти типы строк не имеют исходного или целевого состояния, так как бэкэнд распознает внутренние переходы из этого внутреннего_перехода_таблицы.

methods

Как и любой другой интерфейс, следующие типы переходных рядов реализуют две необходимые статические функции для действия и вызова охраны. Каждая функция получает в качестве параметра (глубочайшего уровня) машину состояний, обрабатывающую событие, само событие, исходное и целевое состояния и все состояния, содержащиеся в машине состояний.

template static void action_call(); 
(Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&);
 
template static bool guard_call(); 
(Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&);
 

a_internal

definition

Это внутренний переход с действием, называемым во время перехода.

 template< class Event, class CalledForAction, void
                                    (CalledForAction::*action)(Event const&)>
                                    a_internal {
}

template parameters

  • Событие: событие, запускающее внутренний переход.

  • CalledForAction: тип, по которому будет называться метод действия. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • действие: указатель на метод, который предоставляет CalledForAction.

g_internal

Это внутренний переход со сторожевым вызовом перед переходом и разрешением на переход при возвращении истинным.

definition

 template< class Event, class CalledForGuard, bool
                                    (CalledForGuard::*guard)(Event const&)>
                                    g_internal {
}

template parameters

  • Событие: событие, запускающее внутренний переход.

  • CalledForGuard: тип, на котором будет называться метод охраны. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • guard: указатель на метод, который предоставляет CalledForGuard.

internal

Это внутренний переход с охранником, названным перед переходом и позволяющим переход, если он возвращается истинным. Он также призывает к действию во время перехода.

definition

 template< class Event, class CalledForAction, void
                                    (CalledForAction::*action)(Event const&), class
                                    CalledForGuard, bool (CalledForGuard::*guard)(Event const&)>
                                    internal {
}

template parameters

  • Событие: событие, запускающее внутренний переход

  • CalledForAction: тип, по которому будет называться метод действия. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • действие: указатель на метод, который предоставляет CalledForAction.

  • CalledForGuard: тип, на котором будет называться метод охраны. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • guard: указатель на метод, который предоставляет CalledForGuard.

_internal

Это внутренний переход без действия или охраны. Это эквивалентно явному «событию игнорирования».

definition

 template< class Event > _internal {
}

template parameters

  • Событие: событие, запускающее внутренний переход.

msm/front/row2.hpp

Этот заголовок содержит варианты строки 2, которые являются расширением стандартных переходов строк для использования в таблице переходов. Они дают возможность определять действие и охранять не только в государственной машине, но и в любом состоянии государственной машины. Они также могут использоваться во внутренних таблицах переходов через их варианты irow2.

methods

Как и любой другой интерфейс, следующие типы переходных рядов реализуют две необходимые статические функции для действия и вызова охраны. Каждая функция получает в качестве параметра (глубочайшего уровня) машину состояний, обрабатывающую событие, само событие, исходное и целевое состояния и все состояния, содержащиеся в машине состояний.

template static void action_call(); 
(Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&);
 
template static bool guard_call(); 
(Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&);
 

_row2

Это переход без действий или охраны. Государственная машина меняет только активное состояние.

definition

 template< class Source, class Event, class Target >
                                    _row2 {
}

template parameters

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • Цель: целевое состояние перехода.

a_row2

Это переход с действием и без охраны.

definition

 template< class Source, class Event, class Target,
                                 {
}
 class CalledForAction, void
                                    (CalledForAction::*action)(Event const&) > _row2 {
}

template parameters

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • Цель: целевое состояние перехода.

  • CalledForAction: тип, по которому будет называться метод действия. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • действие: указатель на метод, который предоставляет CalledForAction.

g_row2

Это переход с охраной и без действий.

definition

 template< class Source, class Event, class Target,
                                 {
}
 class CalledForGuard, bool (CalledForGuard::*guard)(Event
                                    const&) > _row2 {
}

template parameters

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • Цель: целевое состояние перехода.

  • CalledForGuard: тип, на котором будет называться метод охраны. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • guard: указатель на метод, который предоставляет CalledForGuard.

row2

Это переход с охраной и действием.

definition

 template< class Source, class Event, class Target,
                                 {
}
 class CalledForAction, void
                                    (CalledForAction::*action)(Event const&),  {
}
 class CalledForGuard, bool (CalledForGuard::*guard)(Event
                                    const&) > _row2 {
}

template parameters

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • Цель: целевое состояние перехода.

  • CalledForAction: тип, по которому будет называться метод действия. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • действие: указатель на метод, который предоставляет CalledForAction.

  • CalledForGuard: тип, на котором будет называться метод охраны. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • guard: указатель на метод, который предоставляет CalledForGuard.

a_irow2

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

definition

 template< class Source, class Event,  {
}
 class CalledForAction, void
                                    (CalledForAction::*action)(Event const&) > _row2 {
}

template parameters

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • CalledForAction: тип, по которому будет называться метод действия. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • действие: указатель на метод, который предоставляет CalledForAction.

g_irow2

Это внутренний переход для использования внутри таблицы перехода, с защитой и без действий.

definition

 template< class Source, class Event,  {
}
 class CalledForGuard, bool (CalledForGuard::*guard)(Event
                                    const&) > _row2 {
}

template parameters

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • CalledForGuard: тип, на котором будет называться метод охраны. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • guard: указатель на метод, который предоставляет CalledForGuard.

irow2

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

definition

 template< class Source, class Event,  {
}
 class CalledForAction, void
                                    (CalledForAction::*action)(Event const&),  {
}
 class CalledForGuard, bool (CalledForGuard::*guard)(Event
                                    const&) > _row2 {
}

template parameters

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • CalledForAction: тип, по которому будет называться метод действия. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • действие: указатель на метод, который предоставляет CalledForAction.

  • CalledForGuard: тип, на котором будет называться метод охраны. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.

  • guard: указатель на метод, который предоставляет CalledForGuard.

msm/front/state_machine_def.hpp

Этот заголовок обеспечивает реализацию основного интерфейса . Содержит один тип state_machine_def

state_machine_def definition

Этот тип является основным классом для базового (или, возможно, любого другого) интерфейса. Он обеспечивает стандартные типы строк (которые включают в себя внутренние переходы) и реализацию по умолчанию требуемых методов и типдефов.

 template <class Derived,class BaseState =
                                default_base_state> state_machine_def {
}

typedefs

  • flag_list: по умолчанию в государственной машине не устанавливается флаг

  • deferred_events: по умолчанию никакое событие не откладывается.

  • конфигурация: по умолчанию настройка конфигурации не выполняется.

row methods

Как и любой другой интерфейс, следующие типы переходных рядов реализуют две необходимые статические функции для действия и вызова охраны. Каждая функция получает в качестве параметра (глубочайшего уровня) машину состояний, обрабатывающую событие, само событие, исходное и целевое состояния и все состояния, содержащиеся в машине состояний (игнорированной).

template static void action_call(); 
(Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&) ;
 
template static bool guard_call(); 
(Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&) ;
 

a_row

Это переход с действием и без охраны.

template< class Source, class Event, class Target, void (производное::*action)(Event const&) > a_row

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • Цель: целевое состояние перехода.

  • действие: указатель на способ, предоставляемый конкретным интерфейсом (представлен Производный).

g_row

Это переход с охраной и без действий.

template< class Source, class Event, class Target, bool (производное::*guard)(Event const&) > g_row

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • Цель: целевое состояние перехода.

  • guard: указатель на способ, предоставляемый бетонным интерфейсом (представленный Derived).

row

Это переход с охраной и действием.

template< class Source, class Event, class Target, void (Derived::*action) (Event const&), bool (Derived::*guard) (Event const&) > row

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • Цель: целевое состояние перехода.

  • действие: указатель на способ, предоставляемый конкретным интерфейсом (представлен Производный).

  • guard: указатель на способ, предоставляемый бетонным интерфейсом (представленный Derived).

_row

Это переход без действий или охраны. Государственная машина меняет только активное состояние.

template< class Source, class Event, class Target > _row

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • Цель: целевое состояние перехода.

a_irow

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

template< class Source, class Event, void (производное::*action)(Event const&) > a_irow

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • действие: указатель на способ, предоставляемый конкретным интерфейсом (представлен Производный).

g_irow

Это внутренний переход для использования внутри таблицы перехода, с защитой и без действий.

template< class Source, class Event, bool (производное::*guard)(Event const&) > g_irow

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • guard: указатель на способ, предоставляемый бетонным интерфейсом (представленный Derived).

irow

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

template< class Source, class Event, void (Derived::*action) (Event const&), bool (Derived::*guard) (Event const&) > irow

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

  • действие: указатель на способ, предоставляемый конкретным интерфейсом (представлен Производный).

  • guard: указатель на способ, предоставляемый бетонным интерфейсом (представленный Derived).

_irow

Это внутренний переход без действия или охраны. Поскольку это ничего не делает, это означает «игнорировать событие».

template< class Source, class Event >_irow

  • Событие: событие, запускающее переход.

  • Источник: исходное состояние перехода.

methods

state_machine_def обеспечивает реализацию по умолчанию в случае события, которое не может быть обработано машиной состояния (не найден переход). Реализация использует BOOST_ASSERT, так что ошибка будет замечена только в режиме отладки. Перезаписывайте этот метод в своей реализации, чтобы изменить поведение.

template static void no_transition(); 
(Event const& ,Fsm&, int state) ;
 

state_machine_def обеспечивает реализацию по умолчанию в случае, если исключение забрасывается состоянием (вход/выход) или переходом (действие/охрана) поведения. Реализация использует BOOST_ASSERT, так что ошибка будет замечена только в режиме отладки. Перезаписывайте этот метод в своей реализации, чтобы изменить поведение. Этот метод называется только в том случае, если обработка исключений не деактивирована (по умолчанию) путем определения has_no_message_queue.

template static void exception_caught(); 
(Event const& ,Fsm&, std::exception&) ;
 

msm/front/states.hpp

Этот заголовок предоставляет различные состояния (кроме машин состояния) для базового интерфейса (или смешивается с другими интерфейсами).

types

Этот заголовок содержит следующие типы:

no_sm_ptr

дефолтная политика для государств. Это означает, что государствам не нужно сохранять указатель на содержащую их государственную машину.

sm_ptr

обесценивание: государственная политика. Это означает, что государствам необходимо сохранить указатель на содержащую их государственную машину. При виде этого флага бэкэнд будет называть set_sm_ptr (fsm*) и приводить себя в качестве аргумента.

state

Базовый тип для простых состояний. Унаследовать от этого типа определение простого состояния. Первый аргумент необходим, если вы хотите, чтобы ваше состояние (и все другие, используемые в конкретной машине состояния) наследовало основной тип для регистрации или обеспечения общего поведения.

 template<class Base = default_base_state,class
                                    SMPtrPolicy = no_sm_ptr> state {
}

terminate_state

Базовый тип терминальных состояний. Унаследовать от этого типа определение терминального состояния. Первый аргумент необходим, если вы хотите, чтобы ваше состояние (и все другие, используемые в конкретной машине состояния) наследовало основной тип для регистрации или обеспечения общего поведения.

 template<class Base = default_base_state,class
                                    SMPtrPolicy = no_sm_ptr> terminate_state {
}

interrupt_state

Основные типы состояний прерывания. Прерывистые состояния предотвращают любую дальнейшую обработку событий до отправки EndInterruptEvent. Унаследовать от этого типа определение терминального состояния. Первым аргументом является название события, заканчивающего прерывание. Второй аргумент необходим, если вы хотите, чтобы ваше состояние (и все другие используемые в конкретной машине состояния) наследовало основной тип для регистрации или обеспечения общего поведения.

Конец перерыва Событие также может быть последовательностью событий: mpl::vector.

 template<class EndInterruptEvent,class Base =
                                    default_base_state, {
}
 class SMPtrPolicy = no_sm_ptr>
                                    interrupt_state {
}

explicit_entry

Наследовать от этого типа в дополнение к желаемому типу состояния, чтобы позволить этому состоянию для прямого входа. Шаблон параметра дает региону id состояния (регионы пронумерованы в порядке initial_state typedef).

 template <int ZoneIndex=-1> explicit_entry {
}

entry_pseudo_state

Базовый тип для входа псевдосостояний. Псевдосостояния входа являются предопределенным входом в подмашину и соединяют два перехода. Первым аргументом является идентификатор региона, введенного этим государством (регионы пронумерованы в порядке initial_state typedef). Второй аргумент необходим, если вы хотите, чтобы ваше состояние (и все другие используемые в конкретной машине состояния) наследовало основной тип для регистрации или обеспечения общего поведения.

 template<int RegionIndex=-1,class Base =
                                    default_base_state, {
}
 class SMPtrPolicy = no_sm_ptr>
                                    entry_pseudo_state {
}

exit_pseudo_state

Тип выхода псевдосостояний. Псевдосостояния выхода представляют собой предопределенный выход из подмашины и соединяют два перехода. Первым аргументом является название события, которое будет «выброшено» из точки выхода. Это событие не обязательно должно быть таким же, как то, которое посылает внутренняя область, но должно быть конвертируемым. Второй аргумент необходим, если вы хотите, чтобы ваше состояние (и все другие используемые в конкретной машине состояния) наследовало основной тип для регистрации или обеспечения общего поведения.

 template<class Event,class Base =
                                    default_base_state, {
}
 class SMPtrPolicy = no_sm_ptr>
                                    exit_pseudo_state {
}

msm/front/euml/euml.hpp

Этот заголовок включает в себя все eUML, кроме STL-функторов.

msm/front/euml/stl.hpp

Этот заголовок включает в себя все функторы для поддержки STL в eUML. Эти таблицы показывают полное описание.

msm/front/euml/algorithm.hpp

Этот заголовок включает в себя все функторы для поддержки алгоритмов STL в eUML. Эти таблицы показывают полное описание.

msm/front/euml/iteration.hpp

Этот заголовок включает в себя итерационные функторы для поддержки STL в eUML. Это таблицы показывает полное описание.

msm/front/euml/querying.hpp

Этот заголовок включает запрос функторов для поддержки STL в eUML. Это таблицы показывает полное описание.

msm/front/euml/transformation.hpp

Этот заголовок включает в себя функторы трансформации для поддержки STL в eUML. Это таблицы показывает полное описание.

msm/front/euml/container.hpp

Этот заголовок включает в себя контейнерные функторы для поддержки STL в eUML (функторы, вызывающие контейнерные методы). Это таблицы показывает полное описание. Он также предоставляет npos для струн.

Npos_<container type>

Функтор возвращает npos для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Пример:

string_find_(event_(m_song),Char_<'S'>(),Size_t_())!= Npos_() // сравните результат строки::find с npos

msm/front/euml/stt_grammar.hpp

Этот заголовок предоставляет грамматику таблицы переходов. Это включает в себя внутренние переходные таблицы.

functions

build_stt

Функция build_stt оценивает грамматико-конформное выражение как параметр. Он возвращает переходную таблицу, которая является mpl:: вектор переходов (рядов) или, если выражение плохо сформировано (не соответствует грамматике), тип invalid_type, который приведет к статическому утверждению времени компиляции, когда эта переходная таблица передается машине состояния.

template [mpl::vector<...>] / msm::front::euml::invalid_type) build_stt(); 
Expr const& expr;
 

build_internal_stt

Функция build_internal_stt оценивает грамматико-конформное выражение как параметр. Он возвращает переходную таблицу, которая является mpl:: вектор переходов (рядов) или, если выражение плохо сформировано (не соответствует грамматике), тип invalid_type, который приведет к статическому утверждению времени компиляции, когда эта переходная таблица передается машине состояния.

template [mpl::vector<...>] / msm::front::euml::invalid_type) build_internal_stt(); 
Expr const& expr;
 

grammars

transition table

Переходная таблица принимает следующую грамматику:

Stt := Row | (Stt ',' Stt)
Row := (Target '==' (SourcePlusEvent)) /* first syntax*/
       | ( (SourcePlusEvent) '==' Target ) /* second syntax*/
       | (SourcePlusEvent) /* internal transitions */
SourcePlusEvent := (BuildSource '+' BuildEvent)/* standard transition*/ 
                   | (BuildSource) /* anonymous transition */
BuildSource := state_tag | (state_tag '/' Action) | (state_tag '[' Guard ']') 
            | (state_tag '[' Guard ']' '/' Action)
BuildEvent := event_tag | (event_tag '/' Action) | (event_tag '[' Guard ']') 
            | (event_tag '[' Guard ']' '/' Action)

Грамматика Action и Guard определены в state_grammar.hpp и guard_grammar.hpp соответственно. State_tag и event_tag наследуются от euml_state (или других вариантов состояния) и euml_event соответственно. Например, возможны следующие заявления:

target == source + event [guard] / action,
source + event [guard] / action == target,
source + event [guard] / (action1,action2) == target,
target == source + event [guard] / (action1,action2),
target == source + event,
source + event == target,
target == source + event [guard],
source + event [guard] == target,
target == source + event / action,
source + event /action == target,
source / action == target, /*anonymous transition*/
target == source / action, /*anonymous transition*/
source + event /action, /* internal transition*/

internal transition table

Внутренняя таблица переходов принимает следующую грамматику:

IStt := BuildEvent | (IStt ',' IStt)

BuildEvent определяется как для внутренних, так и для стандартных таблиц перехода.

msm/front/euml/guard_grammar.hpp

Этот заголовок содержит грамматику Guard, используемую в предыдущем разделе. Эта грамматика длинная, но довольно простая:

Guard := action_tag | (Guard '&&' Guard) 
        | (Guard '||' Guard) | ... /* operators*/
        | (if_then_else_(Guard,Guard,Guard)) | (function (Action,...Action))

Поддерживается большинство операторов C++ (адрес не поддерживается). Под функцией понимается любая предопределенная функция eUML или любая самодельная функция (с использованием MSM_EUML_METHOD или MSM_EUML_FUNCTION). Действие - это грамматика, определенная в state_grammar.hpp.

msm/front/euml/state_grammar.hpp

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

action grammar

Как и грамматика защиты, эта грамматика поддерживает соответствующие операторы C++ и функции eUML:

Action := action_tag | (Action '+' Action) 
          | ('--' Action) | ... /* operators*/
          | if_then_else_(Guard,Action,Action) | if_then_(Action) 
          | while_(Guard,Action) 
          | do_while_(Guard,Action) | for_(Action,Guard,Action,Action) 
          | (function(Action,...Action))
ActionSequence := Action | (Action ',' Action)

Соответствующими операторами являются: ++ (post/pre), - (post/pre), dereferencing, + (unary/binary), - (unary/binary), - (unary/binary), *, /, %, & (bitwise), | (bitwise), ^ (bitwise), +=, -=, *=, /=, %=, <<=, >>, >>, =, [].

attributes

Эта грамматика используется для добавления атрибутов к состояниям (или машинам состояний) или событиям: Он оценивает слияние::map. Вы можете использовать две формы:

  • attributes_ << no_attributes_

  • атрибуты_ <<атрибуты_1 <<... <<атрибуты_n

Атрибуты могут быть любого типа по умолчанию (требование слияния).

configure

Эта грамматика также имеет две формы:

  • configure_ << no_configure_

  • configure_ << type_1 << ... << type_n

Эта грамматика используется для создания внутри одного синтаксиса:

  • flags: configure_ << some_flag, где some_flag наследуется от euml_flag или определяется с помощью BOOST_MSM_EUML_FLAG.

  • отложенные события: configure_ << some_event, где some_event наследуется от euml_event или определяется с помощью BOOST_MSM_EUML_EVENT или BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES.

  • configuration (message queue, manual deferring, exception handling): configure_ << some_config where some_config inherits from euml_config<some_config>. At the moment, three predefined objects exist (in msm//front/euml/common.hpp):

    • no_исключение: отключить улов исключения

    • no_msg_queue: отключить очередь сообщений

    • отложенные_события: вручную включить обработку отложенных событий

initial states

Грамматика для определения начальных состояний для машины состояния: init_ << state_1 << ... << state_n, где state_1...state_n наследуется от euml_state или определяется с использованием BOOST_MSM_EUML_STATE, BOOST_MSM_EUML_INTERRUPT_STATE, BOOST_MSM_EUML_TERMINATE_STATE, BOOST_MSM_EUML_EXIT_STATE, BOOST_MSM_EUML_EXIT_STATE.

functions

build_sm

Эта функция имеет несколько перегрузок. Тип возврата не относится к вам, так как только тип возврата - это то, что вам нужно.

Определяет состояние машины без входа или выхода:

template func_state_machine<...> build_sm(); 
Stt ,Init;
 

Определение машины состояния с поведением входа:

template func_state_machine<...> build_sm(); 
Stt ,Init,Expr1 const&;
 

Определяет состояние машины с поведением входа и выхода:

template func_state_machine<...> build_sm(); 
Stt ,Init,Expr1 const&,Expr2 const&;
 

Определяет машину состояния с поведением входа, выхода и атрибутами:

template func_state_machine<...> build_sm(); 
Stt ,Init,Expr1 const&, Expr2 const&, Attributes const&;
 

Определяет машину состояния с поведением входа, выхода, атрибутами и конфигурацией (отложенные события, флаги):

template func_state_machine<...> build_sm(); 
Stt ,Init,Expr1 const&, Expr2 const&, Attributes const&, Configure const&;
 

Определяет машину состояния с поведением входа, выхода, атрибутами, конфигурацией (отложенные события, флаги) и базовым состоянием:

template func_state_machine<...> build_sm(); 
Stt ,Init,Expr1 const&, Expr2 const&, Attributes const&, Configure const&, Base;
 

Обратите внимание, что эта функция требует, чтобы класс дополнительных параметров StateNameTag разграничивал машины состояний, имеющие те же параметры, но все еще отличающиеся.

build_state

Эта функция имеет несколько перегрузок. Тип возврата не относится к вам, так как только тип возврата - это то, что вам нужно.

Определяет простое состояние без входа или выхода:

func_state build_state(); 
;
 

Определяет простое состояние с входным поведением:

template func_state<...> build_state(<1); 
Expr1 const&;
 

Определяет простое состояние с поведением входа и выхода:

template func_state<...> build_state(<1); 
Expr1 const&,Expr2 const&;
 

Определяет простое состояние с поведением входа, выхода и атрибутами:

template func_state<...> build_state(); 
Expr1 const&, Expr2 const&, Attributes const&;
 

Определяет простое состояние с поведением входа, выхода, атрибутами и конфигурацией (отложенные события, флаги):

template func_state<...> build_state(); 
Expr1 const&, Expr2 const&, Attributes const&, Configure const&;
 

Определяет простое состояние с поведением входа, выхода, атрибутами, конфигурацией (отложенные события, флаги) и базовым состоянием:

template func_state<...> build_state(); 
Expr1 const&, Expr2 const&, Attributes const&, Configure const&, Base;
 

Обратите внимание, что эта функция требует, чтобы класс дополнительных параметров StateNameTag разъяснял состояния, имеющие те же параметры, но все еще отличающиеся.

build_terminate_state

Эта функция имеет те же перегрузки, что и build_state.

build_interrupt_state

Эта функция имеет несколько перегрузок. Тип возврата не относится к вам, так как только тип возврата - это то, что вам нужно.

Определяет состояние прерывания без входа или выхода:

template func_state<...> build_interrupt_state(<1); 
EndInterruptEvent const&;
 

Определяет состояние прерывания с поведением входа:

template func_state<...> build_interrupt_state(; 
EndInterruptEvent const&,Expr1 const&;
 

Определяет состояние прерывания с поведением входа и выхода:

template func_state<...> build_interrupt_state(<1); 
EndInterruptEvent const&,Expr1 const&,Expr2 const&;
 

Определяет состояние прерывания с поведением входа, выхода и атрибутами:

template func_state<...> build_interrupt_state(); 
EndInterruptEvent const&,Expr1 const&, Expr2 const&, Attributes const&;
 

Определяет состояние прерывания с поведением входа, выхода, атрибутами и конфигурацией (отложенные события, флаги):

template func_state<...> build_interrupt_state(; 
EndInterruptEvent const&,Expr1 const&, Expr2 const&, Attributes const&, Configure const&;
 

Определяет состояние прерывания с поведением входа, выхода, атрибутами, конфигурацией (отложенные события, флаги) и базовым состоянием:

template func_state<...> build_interrupt_state(); 
EndInterruptEvent const&,Expr1 const&, Expr2 const&, Attributes const&, Configure const&, Base;
 

Обратите внимание, что эта функция требует, чтобы класс дополнительных параметров StateNameTag разъяснял состояния, имеющие те же параметры, но все еще отличающиеся.

build_entry_state

Эта функция имеет несколько перегрузок. Тип возврата не относится к вам, так как только тип возврата - это то, что вам нужно.

Определение состояния входа без входа или выхода:

template entry_func_state<...> build_entry_state; 
;
 

Определяет входное псевдосостояние с входным поведением:

template entry_func_state<...> build_entry_state(); 
Expr1 const&;
 

Определяет псевдосостояние входа с поведением входа и выхода:

template entry_func_state<...> build_entry_state(<1); 
Expr1 const&,Expr2 const&;
 

Определяет псевдосостояние входа с поведением входа, выхода и атрибутами:

template entry_func_state<...> build_entry_state(); 
Expr1 const&, Expr2 const&, Attributes const&;
 

Определение псевдосостояния входа с поведением входа, выхода, атрибутами и конфигурацией (отложенные события, флаги):

template entry_func_state<...> build_entry_state(); 
Expr1 const&, Expr2 const&, Attributes const&, Configure const&;
 

Определяет псевдосостояние входа с поведением входа, выхода, атрибутами, конфигурацией (отложенные события, флаги) и базовым состоянием:

template entry_func_state<...> build_entry_state(); 
Expr1 const&, Expr2 const&, Attributes const&, Configure const&, Base;
 

Обратите внимание, что эта функция требует, чтобы класс дополнительных параметров StateNameTag разъяснял состояния, имеющие те же параметры, но все еще отличающиеся.

build_exit_state

Эта функция имеет несколько перегрузок. Тип возврата не относится к вам, так как только тип возврата - это то, что вам нужно.

Определяет псевдосостояние выхода без входа или выхода:

template exit_func_state<...> build_exit_state(<1); 
Event const&;
 

Определяет псевдосостояние выхода с поведением входа:

template exit_func_state<...> build_exit_state(<1); 
Event const&,Expr1 const&;
 

Определяет псевдо-состояние выхода с поведением входа и выхода:

template exit_func_state<...> build_exit_state(<1); 
Event const&,Expr1 const&,Expr2 const&;
 

Определяет псевдосостояние выхода с поведением входа, выхода и атрибутами:

template exit_func_state<...> build_exit_state(); 
Event const&,Expr1 const&, Expr2 const&, Attributes const&;
 

Определяет псевдосостояние выхода с входом, поведением выхода, атрибутами и конфигурацией (отложенные события, флаги):

template exit_func_state<...> build_exit_state(); 
Event const&,Expr1 const&, Expr2 const&, Attributes const&, Configure const&;
 

Определяет псевдосостояние выхода с входом, поведением выхода, атрибутами, конфигурацией (отложенные события, флаги) и базовым состоянием:

template exit_func_state<...> build_exit_state(); 
Event const&,Expr1 const&, Expr2 const&, Attributes const&, Configure const&, Base;
 

Обратите внимание, что эта функция требует, чтобы класс дополнительных параметров StateNameTag разъяснял состояния, имеющие те же параметры, но все еще отличающиеся.

build_explicit_entry_state

Эта функция имеет те же перегрузки, что и build_entry_state и explicit_entry_func_state, что и тип возврата.

msm/front/euml/common.hpp

types

euml_event

Основной тип событий с eUML.

 template <class EventName> euml_event; {
}
struct play : euml_event<play>{};

euml_state

Основной тип для государств с eUML. Обычно вы не будете использовать этот тип напрямую, так как его легче использовать. BOOST_MSM_EUML_STATE, BOOST_MSM_EUML_INTERRUPT_STATE, BOOST_MSM_EUML_TERMINATE_STATE, BOOST_MSM_EUML_EXIT_STATE, BOOST_MSM_EUML_EXIT_STATE.

 template <class StateName> euml_state; {
}

Однако вы можете использовать этот тип напрямую, если вы хотите предоставить вашему состоянию дополнительные функции или обеспечить поведение входа или выхода без функторов, например:

struct Empty : public msm::front::state<> , public euml_state<Empty> 
{
    void foo() {...}
    template <class Event,class Fsm>
    void on_entry(Event const& evt,Fsm& fsm){...}
};

euml_flag

Тип флагов с eUML.

 template <class FlagName> euml_flag; {
}
struct PlayingPaused: euml_flag<PlayingPaused>{};

euml_action

Основной тип для состояний или переходных поведений и охранников с eUML.

 template <class AcionName> euml_action; {
}
struct close_drawer : euml_action<close_drawer>
{
    template <class Fsm,class Evt,class SourceState,class TargetState>
    void operator()(Evt const& , Fsm&, SourceState& ,TargetState& ) {...}
};

Или как поведение входа или выхода из состояния:

struct Playing_Entry : euml_action<Playing_Entry>
{
    template <class Event,class Fsm,class State>
    void operator()(Event const&,Fsm& fsm,State& ){...}
};

euml_config

Основной тип конфигурационных возможностей с eUML.

 template <class ConfigName> euml_config; {
}

Обычно вы не используете этот тип напрямую, а вместо этого используете предопределенную конфигурацию:

  • no_исключение: отключить улов исключения

  • no_msg_queue: отключить очередь сообщений. Очередь сообщений позволяет отправлять событие для обработки во время обработки события.

  • отложенные_события: вручную включить обработку отложенных событий

invalid_type

Тип возвращают грамматические парсеры, если грамматика недействительна. Увидеть этот тип приведет к статическому утверждению.

no_action

Тип держателя для использования в поведении входа / выхода или перехода, который абсолютно ничего не делает.

source_

Общий объект или функция для исходного состояния данного перехода:

  • как объект: возвращает по ссылке исходное состояние перехода, обычно используемое другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION).

    Пример:

    some_user_function_(source_)
  • как функция: возвращает по ссылке атрибут, переданный в качестве параметра.

    Пример:

    source_(m_counter)++

target_

Общий объект или функция для целевого состояния данного перехода:

  • как объект: возвращает по ссылке целевое состояние перехода, обычно используемое другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION).

    Пример:

    some_user_function_(target_)
  • как функция: возвращает по ссылке атрибут, переданный в качестве параметра.

    Пример:

    target_(m_counter)++

state_

Общий объект или функция для состояния заданного поведения входа/выхода. state_ означает source_ в контексте поведения выхода и target_ в контексте поведения входа:

  • в качестве объекта: возвращает по ссылке текущее состояние, обычно используемое другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION).

    Пример:

    some_user_function_(state_) // вызывает некоторую_user_function на текущее состояние
  • как функция: возвращает по ссылке атрибут, переданный в качестве параметра.

    Пример:

    state_(m_counter)++

event_

Общий объект или функция для события, запускающего данный переход (действительны в поведении перехода, а также в поведении входа/выхода состояния):

  • как объект: возвращает по ссылке событие перехода, обычно используемое другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION).

    Пример:

    some_user_function_(event_)
  • как функция: возвращает по ссылке атрибут, переданный в качестве параметра.

    Пример:

    event_(m_counter)++

fsm_

Общий объект или функция для государственной машины, содержащей данный переход:

  • как объект: возвращает по ссылке событие перехода, обычно используемое другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION).

    Пример:

    some_user_function_(fsm_)
  • как функция: возвращает по ссылке атрибут, переданный в качестве параметра.

    Пример:

    fsm_(m_counter)++

substate_

Общий объект или функция, возвращающая состояние данной машины состояния:

  • с 1 параметром: возвращает по ссылке состояние, пройденное в качестве параметра, обычно используемое другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION).

    Пример:

    some_user_function_(substate_(my_state))
  • с 2 параметрами: возвращает состояние, пройденное в качестве первого параметра, из состояния машины, пройденной в качестве второго параметра, обычно используемого другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION). Это имеет смысл при использовании в сочетании с атрибутом_.

    Пример (эквивалент предыдущему примеру):

    some_user_function_(substate_(my_state,fsm_))

attribute_

Общий объект или функция, возвращающая пройденный атрибут (по имени) как второй параметр пройденной вещи как первый (состояние, событие или машина состояния). Пример:

attribute_(substate_(my_state),cd_name_attribute)++

True_

Функтор возвращается истинным для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Пример:

if_then_(True_(),/* some action always called*/)

False_

Функтор, возвращающийся ложным для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Пример:

if_then_(False_(),/* some action never called */)

Int_<int value>

Функтор возвращает целое значение для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Пример:

target_(m_ringing_cpt) = Int_<RINGING_TIME>() // RINGING_TIME is a constant

Char_<char value>

Функтор возвращает значение шара для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Пример:

// look for 'S' in event.m_song
[string_find_(event_(m_song),Char_<'S'>(),Size_t_<0>()) != Npos_<string>()]

Size_t_<size_t value>

Functor возвращает значение size_t для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Пример:

substr_(event_(m_song),Size_t_<1>()) // returns a substring of event.m_song

String_ < mpl::string >

Функтор возвращает строку для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Требуется повышение >= 1,40 для mpl::string.

Пример:

// adds "Let it be" to fsm.m_src_container
push_back_(fsm_(m_src_container), String_<mpl::string<'Let','it ','be'> >())

Predicate_ < some_stl_compatible_functor >

Этот функтор eUML поддерживает STL-функтор (для использования в алгоритме). Это необходимо, потому что все, что находится в таблице перехода, должно быть терминалом eUML.

Пример:

//equivalent to: 
//std::accumulate(fsm.m_vec.begin(),fsm.m_vec.end(),1,std::plus<int>())== 1
accumulate_(begin_(fsm_(m_vec)),end_(fsm_(m_vec)),Int_<1>(),
            Predicate_<std::plus<int> >()) == Int_<1>())

process_

Эта функция отправляет событие на 4 машины состояний, вызывая на них process_event:

  • process_(some_event): обрабатывает событие в текущей (содержащей) машине состояния.

  • process_(some_event [,fsm1...fsm4]): процессы одного и того же события в 1-4 состояниях машины прошли в качестве аргумента.

process2_

Эта функция отправляет событие на 3 машины состояний, вызывая на них process_event и копируя конструкцию события из данных, переданных в качестве второго параметра:

  • process2_(some_event, some_data): обрабатывает событие в текущей (содержащей) машине состояния.

  • process2_(some_event, some_data [,fsm1...fsm3]): процессы одного и того же события в 1-3 состояниях машины прошли как аргумент.

Пример:

// processes NotFound on current state machine, 
// copy-constructed with event.m_song
process2_(NotFound,event_(m_song))

Со следующими определениями:

BOOST_MSM_EUML_DECLARE_ATTRIBUTE(std::string,m_song)//declaration of m_song
NotFound (const string& data) // copy-constructor of NotFound

is_flag_

Эта функция показывает, активен ли флаг, позвонив is_flag_active на машине текущего состояния или в качестве параметра:

  • is_flag_(some_flag) : вызывает is_flag_active на текущей (содержащей) машине состояния.

  • is_flag_(some_flag, some_fsm) :звонки is_flag_active на машине состояния. перешел в качестве аргумента.

defer_

Этот объект отсрочивает текущее событие, вызывая defer_event на машине текущего состояния. Пример:

Empty() + play() / defer_

explicit_(submachine-name,state-name)

Используемый в качестве цели перехода, вызывает явный вход в данное состояние из данной подмашины. Несколько эксплицитных_ в качестве целей, разделенных запятыми, означают вилку. Государство должно быть объявлено как таковое с использованием BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE.

entry_pt_(submachine-name,state-name)

Используемый в качестве мишени перехода от содержащей состояние машины, вызывает ввод субмашинного имени с использованием данного входного псевдо-состояния. Это состояние должно быть объявлено как псевдозапись с использованием BOOST_MSM_EUML_ENTRY_STATE.

exit_pt_(submachine-name,state-name)

Используемый в качестве источника перехода из содержащей состояние машины, вызывает оставление субмашинного имени с использованием данного выхода псевдо-состояния. Это состояние должно быть объявлено как псевдовыход с использованием BOOST_MSM_EUML_EXIT_STATE.

MSM_EUML_FUNCTION

Этот макрос создает функцию eUML и функтор для использования с фронтендом функтора на основе бесплатной функции:

  • первый параметр: имя функтора

  • второй параметр: базовая функция

  • третий параметр: имя функции eUML

  • четвертый параметр: тип возврата при использовании в поведении перехода

  • пятый параметр: тип возврата при использовании в поведении состояния (вход/выход)

Отметим, что сама функция может принимать до 5 аргументов.

Пример:

MSM_EUML_FUNCTION(BinarySearch_,std::binary_search,binary_search_,bool,bool)

Можно использовать как:

binary_search_(begin_(fsm_(m_var)),end_(fsm_(m_var)),Int_<9>())

MSM_EUML_METHOD

Этот макрос создает функцию eUML и функтор для использования с фронтендом функтора на основе метода:

  • первый параметр: имя функтора

  • второй параметр: базовая функция

  • третий параметр: имя функции eUML

  • четвертый параметр: тип возврата при использовании в поведении перехода

  • пятый параметр: тип возврата при использовании в поведении состояния (вход/выход)

Заметим, что сам метод может принимать до 4 аргументов (5 как для свободной функции - 1 для объекта, на который называется метод).

Пример:

struct Empty : public msm::front::state<> , public euml_state<Empty> 
{
     void activate_empty() {std::cout << "switching to Empty " << std::endl;}
... 
};
MSM_EUML_METHOD(ActivateEmpty_,activate_empty,activate_empty_,void,void)

Можно использовать как:

Empty == Open + open_close / (close_drawer , activate_empty_(target_))

BOOST_MSM_EUML_ACTION(action-instance-name)

Этот макрос объявляет тип поведения и конст-пример для использования в поведении состояния или перехода. Сама реализация действий следует за макродекларированием, например:

BOOST_MSM_EUML_ACTION(good_disk_format)
{
     template <class Fsm,class Evt,class SourceState,class TargetState>
     void/bool operator()(Evt const& evt,Fsm&,SourceState& ,TargetState& ){...}
};

BOOST_MSM_EUML_FLAG(flag-instance-name)

Этот макрос объявляет тип флага и конст-пример для использования в поведении.

BOOST_MSM_EUML_FLAG_NAME(flag-instance-name)

Этот макрос возвращает имя типа флага, генерируемого BOOST_. MSM_EUML_FLAG. Это необходимо там, где требуется тип (обычно с помощью метода back-end is_flag_active). Например:

fsm.is_flag_active<BOOST_MSM_EUML_FLAG_NAME(CDLoaded)>()

BOOST_MSM_EUML_DECLARE_ATTRIBUTE(event-type,event-name)

Этот макрос объявляет атрибут, называемый event-name типа event-type. Этот атрибут может быть включен в список атрибутов с помощью BOOST_. MSM_EUML_ATTRIBUTES.

BOOST_MSM_EUML_ATTRIBUTES(attributes-expression,attributes-name)

Этот макрос объявляет список атрибутов, называемый атрибутами, основанный на выражении в качестве первого аргумента. Эти атрибуты затем могут быть сделаны частью события, используя BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES, состояния как 3-й параметр BOOST_MSM_EUML_STATE или машины состояния как 5-й параметр BOOST_MSM_EUML_DECLARE_STATE_MACHINE.

Атрибуты добавляются с помощью левого смещения, например:

// m_song is of type std::string
BOOST_MSM_EUML_DECLARE_ATTRIBUTE(std::string,m_song)
// contains one attribute, m_song
BOOST_MSM_EUML_ATTRIBUTES((attributes_ << m_song ), FoundDef)

BOOST_MSM_EUML_EVENT(event-instance name)

Этот макрос определяет тип события (event-instance-name_helper) и объявляет константный экземпляр этого типа события, называемый event-instance-name, для использования в таблице переходов или поведения состояния.

BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(event-instance-name,attributes)

Этот макрос определяет тип события (event-instance-name_helper) и объявляет константный экземпляр этого типа события, называемый event-instance-name, для использования в таблице переходов или поведения состояния. Событие будет иметь в качестве атрибутов те, которые прошли второй аргумент:

BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(Found,FoundDef)

Созданный экземпляр события поддерживает оператор()(атрибуты), так что

my_back_end.process_event(Found(some_string))

это возможно.

BOOST_MSM_EUML_EVENT_NAME(event-instance-name)

Этот макрос возвращает название типа события, генерируемого BOOST_MSM_EUML_EVENT или BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES. Это нужно там, где требуется тип (обычно в заднем определении). Например:

typedef msm::back::state_machine<Playing_,
msm::back::ShallowHistory<mpl::vector<BOOST_MSM_EUML_EVENT_NAME(end_pause)
> > > Playing_type;

BOOST_MSM_EUML_STATE(build-expression,state-instance-name)

Этот макрос определяет тип состояния (state-instance-name_helper) и объявляет константный экземпляр этого типа состояния, называемый state-instance-name, для использования в таблице переходов или поведения состояния.

Существует несколько возможных вариантов синтаксиса выражения:

  • (): состояние без действия входа или выхода.

  • (Expr1): состояние с входом, но без выхода.

  • (Expr1,Expr2): состояние с действием входа и выхода.

  • (Expr1,Expr2,Атрибуты): состояние с действием входа и выхода, определяющее некоторые атрибуты.

  • (Expr1,Expr2,Attributes,Configure): состояние с действием входа и выхода, определение некоторых атрибутов и флагов (стандартные флаги МСМ) или отложенных событий (стандартные события с отсрочкой МСМ).

  • (Expr1,Expr2,Attributes,Configure,Base): состояние с действием входа и выхода, определяющее некоторые атрибуты, флаги и отложенные события (простые отложенные события msm) и базовое состояние без по умолчанию (как определено в стандарте MSM).

BOOST_MSM_EUML_INTERRUPT_STATE(build-expression,state-instance-name)

Этот макрос определяет тип состояния прерывания (state-instance-name_helper) и объявляет константный экземпляр этого типа состояния, называемый state-instance-name, для использования в таблице переходов или поведения состояния.

Существует несколько поссибилитов для синтаксиса выражения. Во всех из них первым аргументом является название события (сгенерированного одним из предыдущих макросов), заканчивающего прерывание:

  • (end_interrupt_event): состояние прерывания без действия входа или выхода.

  • (end_interrupt_event,Expr1): состояние прерывания при входе, но без выхода.

  • (end_interrupt_event,Expr1,Expr2): состояние прерывания с действием входа и выхода.

  • (end_interrupt_event,Expr1,Expr2,Attributes): состояние прерывания с действием входа и выхода, определяющее некоторые атрибуты.

  • (end_interrupt_event,Expr1,Expr2,Attributes,Configure): состояние прерывания с действием входа и выхода, определение некоторых атрибутов и флагов (стандартные флаги МСМ) или отложенных событий (стандартные события с отсрочкой МСМ).

  • (end_interrupt_event,Expr1,Expr2,Attributes,Configure,Base): состояние прерывания с действием входа и выхода, определение некоторых атрибутов, флагов и отложенных событий (простые отложенные события msm) и базовое состояние без по умолчанию (как определено в стандарте MSM).

BOOST_MSM_EUML_TERMINATE_STATE(build-expression,state-instance-name)

Этот макрос определяет конечный тип псевдосостояния (state-instance-name_helper) и объявляет константный экземпляр этого типа состояния, называемый state-instance-name, для использования в таблице переходов или поведения состояния.

Существует несколько возможных вариантов синтаксиса выражения:

  • (): прекратить псевдосостояние без действия входа или выхода.

  • (Expr1): прекратить псевдосостояние с действием входа, но без выхода.

  • (Expr1,Expr2): прекращение псевдосостояния с действием входа и выхода.

  • (Expr1,Expr2,Атрибуты): завершить псевдосостояние с действием входа и выхода, определив некоторые атрибуты.

  • (Expr1,Expr2,Attributes,Configure): завершать псевдосостояние с действием входа и выхода, определяя некоторые атрибуты и флаги (стандартные флаги MSM) или отложенные события (стандартные события MSM отложенные).

  • (Expr1,Expr2,Attributes,Configure,Base): завершить псевдосостояние с действием входа и выхода, определив некоторые атрибуты, флаги и отложенные события (простые отложенные события msm) и базовое состояние без по умолчанию (как определено в стандарте MSM).

BOOST_MSM_EUML_EXIT_STATE(build-expression,state-instance-name)

Этот макрос определяет тип псевдосостояния выхода (state-instance-name_helper) и объявляет константный экземпляр этого типа состояния, называемый state-instance-name, для использования в таблице перехода или поведения состояния.

Существует несколько возможных вариантов синтаксиса выражения:

  • (forwarded_event): выход из псевдосостояния без действия входа или выхода.

  • (forwarded_event,Expr1): выход псевдосостояние с входом, но без действия выхода.

  • (forwarded_event,Expr1,Expr2): выход псевдосостояние с действием входа и выхода.

  • (forwarded_event,Expr1,Expr2,Attributes): выход псевдосостояние с действием входа и выхода, определяющим некоторые атрибуты.

  • (forwarded_event,Expr1,Expr2,Attributes,Configure): выход псевдосостояния с действием входа и выхода, определение некоторых атрибутов и флагов (стандартные флаги МСМ) или отложенных событий (стандартные события с отсрочкой МСМ).

  • (forwarded_event,Expr1,Expr2,Attributes,Configure,Base): выход псевдо-состояние с действием входа и выхода, определение некоторых атрибутов, флагов и отложенных событий (простые отложенные события msm) и непо умолчанию базовое состояние (как определено в стандарте MSM).

Обратите внимание, что переадресованное событие должно быть сконструировано из события, отправленного подмашиной, содержащей точку выхода.

BOOST_MSM_EUML_ENTRY_STATE(int region-index,build-expression,state-instance-name)

Этот макрос определяет тип входного псевдо-состояния (state-instance-name_helper) и объявляет константный экземпляр этого типа состояния, называемый state-instance-name, для использования в таблице переходов или поведения состояния.

Существует несколько возможных вариантов синтаксиса выражения:

  • (): вход псевдосостояние без действия входа или выхода.

  • (Expr1): вход псевдосостояние с входом, но без действия выхода.

  • (Expr1,Expr2): вход псевдо-состояние с действием входа и выхода.

  • (Expr1,Expr2,Атрибуты): вход псевдосостояние с действием входа и выхода, определяющим некоторые атрибуты.

  • (Expr1,Expr2,Attributes,Configure): вход псевдосостояние с действием входа и выхода, определение некоторых атрибутов и флагов (стандартные флаги МСМ) или отложенных событий (стандартные события с отсрочкой МСМ).

  • (Expr1,Expr2,Attributes,Configure,Base): вход псевдосостояние с действием входа и выхода, определение некоторых атрибутов, флагов и отложенных событий (простые отложенные события msm) и непо умолчанию базовое состояние (как определено в стандарте MSM).

BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE(int region-index,build-expression,state-instance-name)

Этот макрос определяет тип субмашины (state-instance-name_helper), который может быть явно введен, а также объявляет константный экземпляр этого типа состояния, называемый state-instance-name, для использования в таблице переходов или поведения состояния.

Существует несколько возможных вариантов синтаксиса выражения:

  • (): состояние без действия входа или выхода.

  • (Expr1): состояние с входом, но без выхода.

  • (Expr1,Expr2): состояние с действием входа и выхода.

  • (Expr1,Expr2,Атрибуты): состояние с действием входа и выхода, определяющее некоторые атрибуты.

  • (Expr1,Expr2,Attributes,Configure): состояние с действием входа и выхода, определение некоторых атрибутов и флагов (стандартные флаги МСМ) или отложенных событий (стандартные события с отсрочкой МСМ).

  • (Expr1,Expr2,Attributes,Configure,Base): состояние с действием входа и выхода, определяющее некоторые атрибуты, флаги и отложенные события (простые отложенные события msm) и базовое состояние без по умолчанию (как определено в стандарте MSM).

BOOST_MSM_EUML_STATE_NAME(state-instance-name)

Этот макрос возвращает название типа состояния, генерируемого BOOST_MSM_EUML_STATE или другими макросами состояния. Это нужно там, где требуется тип (обычно с помощью функции бэкэнда). Например:

fsm.get_state<BOOST_MSM_EUML_STATE_NAME(StringFind)&>().some_state_function();

BOOST_MSM_EUML_DECLARE_STATE(build-expression,state-instance-name)

Как и BOOST_MSM_EUML_STATE, но не предоставляет пример, а просто декларацию типа.

BOOST_MSM_EUML_DECLARE_INTERRUPT_STATE(build-expression,state-instance-name)

Как и BOOST_MSM_EUML_INTERRUPT_STATE, но не предоставляет пример, просто объявление типа.

BOOST_MSM_EUML_DECLARE_TERMINATE_STATE(build-expression,state-instance-name)

Как и BOOST_MSM_EUML_TERMINATE_STATE, но не предоставляет пример, просто объявление типа.

BOOST_MSM_EUML_DECLARE_EXIT_STATE(build-expression,state-instance-name)

Как и BOOST_MSM_EUML_EXIT_STATE, но не предоставляет пример, а просто декларацию типа.

BOOST_MSM_EUML_DECLARE_ENTRY_STATE(int region-index,build-expression,state-instance-name)

Как и BOOST_MSM_EUML_ENTRY_STATE, но не предоставляет пример, а просто декларацию типа.

BOOST_MSM_EUML_DECLARE_EXPLICIT_ENTRY_STATE(int region-index,build-expression,state-instance-name)

Как и BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE, но не предоставляет пример, просто объявление типа.

BOOST_MSM_EUML_TRANSITION_TABLE(expression, table-instance-name)

Этот макрос объявляет тип таблицы перехода, а также константный экземпляр таблицы, который затем может использоваться в объявлении машины состояния (см. BOOST_MSM_EUML_DECLARE_STATE_MACHINE). Выражение должно следовать грамматике таблицы перехода .

BOOST_MSM_EUML_DECLARE_TRANSITION_TABLE(iexpression,table-instance-name)

Как и BOOST_MSM_EUML_TRANSITION_TABLE, но не предоставляет пример, а просто декларацию типа.

BOOST_MSM_EUML_INTERNAL_TRANSITION_TABLE(expression, table-instance-name)

Этот макрос объявляет тип переходной таблицы, а также константный экземпляр таблицы. Выражение должно следовать грамматике таблицы перехода . На данный момент этот макрос не используется.

BOOST_MSM_EUML_DECLARE_INTERNAL_TRANSITION_TABLE(iexpression,table-instance-name)

Как и BOOST_MSM_EUML_TRANSITION_TABLE, но не предоставляет пример, а просто декларацию типа. В настоящее время это единственный способ объявить внутреннюю таблицу перехода с eUML. Например:

BOOST_MSM_EUML_DECLARE_STATE((Open_Entry,Open_Exit),Open_def)
struct Open_impl : public Open_def
{
    BOOST_MSM_EUML_DECLARE_INTERNAL_TRANSITION_TABLE((
          open_close [internal_guard1] / internal_action1 ,
          open_close [internal_guard2] / internal_action2
    ))
};                    

Статья Front-end раздела Meta State Machine (MSM) Part II. Reference может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Part II. Reference ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:07:04/0.019369840621948/1