![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Front-endBoost , Meta State Machine (MSM) , Part II. Reference
|
template ) | ; |
(
Fsm& fsm,Event const&
evt,SourceState&,TargetState,AllStates&)
;template ) | ; |
(
Fsm& fsm,Event const&
evt,SourceState&,TargetState,AllStates&)
;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;
Как и любой другой интерфейс, Internal реализует две необходимые статические функции для действий и вызова охраны. Каждая функция получает в качестве параметра (глубочайшего уровня) машину состояний, обрабатывающую событие, само событие, исходное и целевое состояния и все состояния, содержащиеся в машине состояний.
template ) | ; |
(
Fsm& fsm,Event const&
evt,SourceState&,TargetState,AllStates&)
;template ) | ; |
(
Fsm& fsm,Event const&
evt,SourceState&,TargetState,AllStates&)
;Этот заголовок реализует внутренние переходные строки для использования внутри внутреннего стола. Все эти типы строк не имеют исходного или целевого состояния, так как бэкэнд распознает внутренние переходы из этого внутреннего_перехода_таблицы.
Как и любой другой интерфейс, следующие типы переходных рядов реализуют две необходимые статические функции для действия и вызова охраны. Каждая функция получает в качестве параметра (глубочайшего уровня) машину состояний, обрабатывающую событие, само событие, исходное и целевое состояния и все состояния, содержащиеся в машине состояний.
template ) | ; |
(
Fsm& fsm,Event const&
evt,SourceState&,TargetState,AllStates&)
;template ) | ; |
(
Fsm& fsm,Event const&
evt,SourceState&,TargetState,AllStates&)
;Это внутренний переход со сторожевым вызовом перед переходом и разрешением на переход при возвращении истинным.
Это внутренний переход с охранником, названным перед переходом и позволяющим переход, если он возвращается истинным. Он также призывает к действию во время перехода.
template< class Event, class CalledForAction, void (CalledForAction::*action)(Event const&), class CalledForGuard, bool (CalledForGuard::*guard)(Event const&)> internal {
}
Событие: событие, запускающее внутренний переход
CalledForAction: тип, по которому будет называться метод действия. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.
действие: указатель на метод, который предоставляет CalledForAction.
CalledForGuard: тип, на котором будет называться метод охраны. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.
guard: указатель на метод, который предоставляет CalledForGuard.
Этот заголовок содержит варианты строки 2, которые являются расширением стандартных переходов строк для использования в таблице переходов. Они дают возможность определять действие и охранять не только в государственной машине, но и в любом состоянии государственной машины. Они также могут использоваться во внутренних таблицах переходов через их варианты irow2.
Как и любой другой интерфейс, следующие типы переходных рядов реализуют две необходимые статические функции для действия и вызова охраны. Каждая функция получает в качестве параметра (глубочайшего уровня) машину состояний, обрабатывающую событие, само событие, исходное и целевое состояния и все состояния, содержащиеся в машине состояний.
template ) | ; |
(
Fsm& fsm,Event const&
evt,SourceState&,TargetState,AllStates&)
;template ) | ; |
(
Fsm& fsm,Event const&
evt,SourceState&,TargetState,AllStates&)
;Это переход с действием и без охраны.
template< class Source, class Event, class Target, {
}
class CalledForAction, void (CalledForAction::*action)(Event const&) > _row2 {
}
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
Цель: целевое состояние перехода.
CalledForAction: тип, по которому будет называться метод действия. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.
действие: указатель на метод, который предоставляет CalledForAction.
Это переход с охраной и без действий.
template< class Source, class Event, class Target, {
}
class CalledForGuard, bool (CalledForGuard::*guard)(Event const&) > _row2 {
}
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
Цель: целевое состояние перехода.
CalledForGuard: тип, на котором будет называться метод охраны. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.
guard: указатель на метод, который предоставляет CalledForGuard.
Это переход с охраной и действием.
template< class Source, class Event, class Target, {
}
class CalledForAction, void (CalledForAction::*action)(Event const&), {
}
class CalledForGuard, bool (CalledForGuard::*guard)(Event const&) > _row2 {
}
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
Цель: целевое состояние перехода.
CalledForAction: тип, по которому будет называться метод действия. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.
действие: указатель на метод, который предоставляет CalledForAction.
CalledForGuard: тип, на котором будет называться метод охраны. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.
guard: указатель на метод, который предоставляет CalledForGuard.
Это внутренний переход для использования внутри таблицы перехода, с действием и без охраны.
template< class Source, class Event, {
}
class CalledForAction, void (CalledForAction::*action)(Event const&) > _row2 {
}
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
CalledForAction: тип, по которому будет называться метод действия. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.
действие: указатель на метод, который предоставляет CalledForAction.
Это внутренний переход для использования внутри таблицы перехода, с защитой и без действий.
template< class Source, class Event, {
}
class CalledForGuard, bool (CalledForGuard::*guard)(Event const&) > _row2 {
}
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
CalledForGuard: тип, на котором будет называться метод охраны. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.
guard: указатель на метод, который предоставляет CalledForGuard.
Это внутренний переход для использования внутри таблицы перехода, с защитой и действием.
template< class Source, class Event, {
}
class CalledForAction, void (CalledForAction::*action)(Event const&), {
}
class CalledForGuard, bool (CalledForGuard::*guard)(Event const&) > _row2 {
}
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
CalledForAction: тип, по которому будет называться метод действия. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.
действие: указатель на метод, который предоставляет CalledForAction.
CalledForGuard: тип, на котором будет называться метод охраны. Это может быть либо состояние содержащего состояния машины, либо само состояние машины.
guard: указатель на метод, который предоставляет CalledForGuard.
Этот заголовок обеспечивает реализацию основного интерфейса . Содержит один тип state_machine_def
Этот тип является основным классом для базового (или, возможно, любого другого) интерфейса. Он обеспечивает стандартные типы строк (которые включают в себя внутренние переходы) и реализацию по умолчанию требуемых методов и типдефов.
template <class Derived,class BaseState = default_base_state> state_machine_def {
}
flag_list: по умолчанию в государственной машине не устанавливается флаг
deferred_events: по умолчанию никакое событие не откладывается.
конфигурация: по умолчанию настройка конфигурации не выполняется.
Как и любой другой интерфейс, следующие типы переходных рядов реализуют две необходимые статические функции для действия и вызова охраны. Каждая функция получает в качестве параметра (глубочайшего уровня) машину состояний, обрабатывающую событие, само событие, исходное и целевое состояния и все состояния, содержащиеся в машине состояний (игнорированной).
template ) | ; |
(
Fsm& fsm,Event const&
evt,SourceState&,TargetState,AllStates&)
;template ) | ; |
(
Fsm& fsm,Event const&
evt,SourceState&,TargetState,AllStates&)
;Это переход с действием и без охраны.
template< class Source, class Event, class Target, void (производное::*action)(Event const&) > a_row
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
Цель: целевое состояние перехода.
действие: указатель на способ, предоставляемый конкретным интерфейсом (представлен Производный
).
Это переход с охраной и без действий.
template< class Source, class Event, class Target, bool (производное::*guard)(Event const&) > g_row
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
Цель: целевое состояние перехода.
guard: указатель на способ, предоставляемый бетонным интерфейсом (представленный Derived
).
Это переход с охраной и действием.
template< class Source, class Event, class Target, void (Derived::*action) (Event const&), bool (Derived::*guard) (Event const&) > row
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
Цель: целевое состояние перехода.
действие: указатель на способ, предоставляемый конкретным интерфейсом (представлен Производный
).
guard: указатель на способ, предоставляемый бетонным интерфейсом (представленный Derived
).
Это переход без действий или охраны. Государственная машина меняет только активное состояние.
template< class Source, class Event, class Target > _row
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
Цель: целевое состояние перехода.
Это внутренний переход для использования внутри таблицы перехода, с действием и без охраны.
template< class Source, class Event, void (производное::*action)(Event const&) > a_irow
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
действие: указатель на способ, предоставляемый конкретным интерфейсом (представлен Производный
).
Это внутренний переход для использования внутри таблицы перехода, с защитой и без действий.
template< class Source, class Event, bool (производное::*guard)(Event const&) > g_irow
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
guard: указатель на способ, предоставляемый бетонным интерфейсом (представленный Derived
).
Это внутренний переход для использования внутри таблицы перехода, с защитой и действием.
template< class Source, class Event, void (Derived::*action) (Event const&), bool (Derived::*guard) (Event const&) > irow
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
действие: указатель на способ, предоставляемый конкретным интерфейсом (представлен Производный
).
guard: указатель на способ, предоставляемый бетонным интерфейсом (представленный Derived
).
Это внутренний переход без действия или охраны. Поскольку это ничего не делает, это означает «игнорировать событие».
template< class Source, class Event >_irow
Событие: событие, запускающее переход.
Источник: исходное состояние перехода.
state_machine_def
обеспечивает реализацию по умолчанию в случае события, которое не может быть обработано машиной состояния (не найден переход). Реализация использует BOOST_ASSERT
, так что ошибка будет замечена только в режиме отладки. Перезаписывайте этот метод в своей реализации, чтобы изменить поведение.
template ) | ; |
(
Event const& ,Fsm&, int
state)
;state_machine_def
обеспечивает реализацию по умолчанию в случае, если исключение забрасывается состоянием (вход/выход) или переходом (действие/охрана) поведения. Реализация использует BOOST_ASSERT
, так что ошибка будет замечена только в режиме отладки. Перезаписывайте этот метод в своей реализации, чтобы изменить поведение. Этот метод называется только в том случае, если обработка исключений не деактивирована (по умолчанию) путем определения has_no_message_queue
.
template ) | ; |
(
Event const& ,Fsm&,
std::exception&)
;Этот заголовок предоставляет различные состояния (кроме машин состояния) для базового интерфейса (или смешивается с другими интерфейсами).
Этот заголовок содержит следующие типы:
дефолтная политика для государств. Это означает, что государствам не нужно сохранять указатель на содержащую их государственную машину.
обесценивание: государственная политика. Это означает, что государствам необходимо сохранить указатель на содержащую их государственную машину. При виде этого флага бэкэнд будет называть set_sm_ptr (fsm*) и приводить себя в качестве аргумента.
Базовый тип для простых состояний. Унаследовать от этого типа определение простого состояния. Первый аргумент необходим, если вы хотите, чтобы ваше состояние (и все другие, используемые в конкретной машине состояния) наследовало основной тип для регистрации или обеспечения общего поведения.
template<class Base = default_base_state,class SMPtrPolicy = no_sm_ptr> state {
}
Базовый тип терминальных состояний. Унаследовать от этого типа определение терминального состояния. Первый аргумент необходим, если вы хотите, чтобы ваше состояние (и все другие, используемые в конкретной машине состояния) наследовало основной тип для регистрации или обеспечения общего поведения.
template<class Base = default_base_state,class SMPtrPolicy = no_sm_ptr> terminate_state {
}
Основные типы состояний прерывания. Прерывистые состояния предотвращают любую дальнейшую обработку событий до отправки EndInterruptEvent. Унаследовать от этого типа определение терминального состояния. Первым аргументом является название события, заканчивающего прерывание. Второй аргумент необходим, если вы хотите, чтобы ваше состояние (и все другие используемые в конкретной машине состояния) наследовало основной тип для регистрации или обеспечения общего поведения.
Конец перерыва Событие также может быть последовательностью событий: mpl::vector
template<class EndInterruptEvent,class Base = default_base_state, {
}
class SMPtrPolicy = no_sm_ptr> interrupt_state {
}
Наследовать от этого типа в дополнение к желаемому типу состояния, чтобы позволить этому состоянию для прямого входа. Шаблон параметра дает региону id состояния (регионы пронумерованы в порядке initial_state
typedef).
template <int ZoneIndex=-1> explicit_entry {
}
Базовый тип для входа псевдосостояний. Псевдосостояния входа являются предопределенным входом в подмашину и соединяют два перехода. Первым аргументом является идентификатор региона, введенного этим государством (регионы пронумерованы в порядке initial_state
typedef). Второй аргумент необходим, если вы хотите, чтобы ваше состояние (и все другие используемые в конкретной машине состояния) наследовало основной тип для регистрации или обеспечения общего поведения.
template<int RegionIndex=-1,class Base = default_base_state, {
}
class SMPtrPolicy = no_sm_ptr> entry_pseudo_state {
}
Тип выхода псевдосостояний. Псевдосостояния выхода представляют собой предопределенный выход из подмашины и соединяют два перехода. Первым аргументом является название события, которое будет «выброшено» из точки выхода. Это событие не обязательно должно быть таким же, как то, которое посылает внутренняя область, но должно быть конвертируемым. Второй аргумент необходим, если вы хотите, чтобы ваше состояние (и все другие используемые в конкретной машине состояния) наследовало основной тип для регистрации или обеспечения общего поведения.
template<class Event,class Base = default_base_state, {
}
class SMPtrPolicy = no_sm_ptr> exit_pseudo_state {
}
Этот заголовок включает в себя все функторы для поддержки STL в eUML. Эти таблицы показывают полное описание.
Этот заголовок включает в себя все функторы для поддержки алгоритмов STL в eUML. Эти таблицы показывают полное описание.
Этот заголовок включает в себя итерационные функторы для поддержки STL в eUML. Это таблицы показывает полное описание.
Этот заголовок включает запрос функторов для поддержки STL в eUML. Это таблицы показывает полное описание.
Этот заголовок включает в себя функторы трансформации для поддержки STL в eUML. Это таблицы показывает полное описание.
Этот заголовок включает в себя контейнерные функторы для поддержки STL в eUML (функторы, вызывающие контейнерные методы). Это таблицы показывает полное описание. Он также предоставляет npos для струн.
Этот заголовок предоставляет грамматику таблицы переходов. Это включает в себя внутренние переходные таблицы.
Функция build_stt оценивает грамматико-конформное выражение как параметр. Он возвращает переходную таблицу, которая является mpl:: вектор переходов (рядов) или, если выражение плохо сформировано (не соответствует грамматике), тип invalid_type
, который приведет к статическому утверждению времени компиляции, когда эта переходная таблица передается машине состояния.
template ) | ; |
Expr const& expr
;Функция build_internal_stt оценивает грамматико-конформное выражение как параметр. Он возвращает переходную таблицу, которая является mpl:: вектор переходов (рядов) или, если выражение плохо сформировано (не соответствует грамматике), тип invalid_type
, который приведет к статическому утверждению времени компиляции, когда эта переходная таблица передается машине состояния.
template ) | ; |
Expr const& expr
;Переходная таблица принимает следующую грамматику:
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*/
Этот заголовок содержит грамматику 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.
Этот заголовок предоставляет грамматику действий и различные грамматики и функции для построения состояний с использованием eUML.
Как и грамматика защиты, эта грамматика поддерживает соответствующие операторы 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), +=, -=, *=, /=, %=, <<=, >>, >>, =, [].
Эта грамматика используется для добавления атрибутов к состояниям (или машинам состояний) или событиям: Он оценивает слияние::map. Вы можете использовать две формы:
attributes_ << no_attributes_
атрибуты_ <<атрибуты_1 <<... <<атрибуты_n
Атрибуты могут быть любого типа по умолчанию (требование слияния).
Эта грамматика также имеет две формы:
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: отключить очередь сообщений
отложенные_события: вручную включить обработку отложенных событий
Грамматика для определения начальных состояний для машины состояния: 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.
Эта функция имеет несколько перегрузок. Тип возврата не относится к вам, так как только тип возврата - это то, что вам нужно.
Определяет состояние машины без входа или выхода:
template ) | ; |
Stt ,Init
;Определение машины состояния с поведением входа:
template ) | ; |
Stt ,Init,Expr1 const&
;Определяет состояние машины с поведением входа и выхода:
template ) | ; |
Stt ,Init,Expr1 const&,Expr2 const&
;Определяет машину состояния с поведением входа, выхода и атрибутами:
template ) | ; |
Stt ,Init,Expr1 const&, Expr2 const&, Attributes
const&
;Определяет машину состояния с поведением входа, выхода, атрибутами и конфигурацией (отложенные события, флаги):
template ) | ; |
Stt ,Init,Expr1 const&, Expr2 const&, Attributes
const&, Configure const&
;Определяет машину состояния с поведением входа, выхода, атрибутами, конфигурацией (отложенные события, флаги) и базовым состоянием:
template ) | ; |
Stt ,Init,Expr1 const&, Expr2 const&, Attributes
const&, Configure const&, Base
;Обратите внимание, что эта функция требует, чтобы класс дополнительных параметров StateNameTag разграничивал машины состояний, имеющие те же параметры, но все еще отличающиеся.
Эта функция имеет несколько перегрузок. Тип возврата не относится к вам, так как только тип возврата - это то, что вам нужно.
Определяет простое состояние без входа или выхода:
func_state ) | ; |
;Определяет простое состояние с входным поведением:
template | ; |
Expr1 const&
;Определяет простое состояние с поведением входа и выхода:
template | ; |
Expr1 const&,Expr2 const&
;Определяет простое состояние с поведением входа, выхода и атрибутами:
template ) | ; |
Expr1 const&, Expr2 const&, Attributes
const&
;Определяет простое состояние с поведением входа, выхода, атрибутами и конфигурацией (отложенные события, флаги):
template ) | ; |
Expr1 const&, Expr2 const&, Attributes const&,
Configure const&
;Определяет простое состояние с поведением входа, выхода, атрибутами, конфигурацией (отложенные события, флаги) и базовым состоянием:
template ) | ; |
Expr1 const&, Expr2 const&, Attributes const&,
Configure const&, Base
;Обратите внимание, что эта функция требует, чтобы класс дополнительных параметров StateNameTag разъяснял состояния, имеющие те же параметры, но все еще отличающиеся.
Эта функция имеет несколько перегрузок. Тип возврата не относится к вам, так как только тип возврата - это то, что вам нужно.
Определяет состояние прерывания без входа или выхода:
template | ; |
EndInterruptEvent const&
;Определяет состояние прерывания с поведением входа:
template | ; |
EndInterruptEvent const&,Expr1 const&
;Определяет состояние прерывания с поведением входа и выхода:
template | ; |
EndInterruptEvent const&,Expr1 const&,Expr2
const&
;Определяет состояние прерывания с поведением входа, выхода и атрибутами:
template ) | ; |
EndInterruptEvent const&,Expr1 const&, Expr2
const&, Attributes const&
;Определяет состояние прерывания с поведением входа, выхода, атрибутами и конфигурацией (отложенные события, флаги):
template | ; |
EndInterruptEvent const&,Expr1 const&, Expr2
const&, Attributes const&, Configure
const&
;Определяет состояние прерывания с поведением входа, выхода, атрибутами, конфигурацией (отложенные события, флаги) и базовым состоянием:
template ) | ; |
EndInterruptEvent const&,Expr1 const&, Expr2
const&, Attributes const&, Configure const&,
Base
;Обратите внимание, что эта функция требует, чтобы класс дополнительных параметров StateNameTag разъяснял состояния, имеющие те же параметры, но все еще отличающиеся.
Эта функция имеет несколько перегрузок. Тип возврата не относится к вам, так как только тип возврата - это то, что вам нужно.
Определение состояния входа без входа или выхода:
template | ; |
;Определяет входное псевдосостояние с входным поведением:
template ) | ; |
Expr1 const&
;Определяет псевдосостояние входа с поведением входа и выхода:
template | ; |
Expr1 const&,Expr2 const&
;Определяет псевдосостояние входа с поведением входа, выхода и атрибутами:
template ) | ; |
Expr1 const&, Expr2 const&, Attributes
const&
;Определение псевдосостояния входа с поведением входа, выхода, атрибутами и конфигурацией (отложенные события, флаги):
template ) | ; |
Expr1 const&, Expr2 const&, Attributes const&,
Configure const&
;Определяет псевдосостояние входа с поведением входа, выхода, атрибутами, конфигурацией (отложенные события, флаги) и базовым состоянием:
template ) | ; |
Expr1 const&, Expr2 const&, Attributes const&,
Configure const&, Base
;Обратите внимание, что эта функция требует, чтобы класс дополнительных параметров StateNameTag разъяснял состояния, имеющие те же параметры, но все еще отличающиеся.
Эта функция имеет несколько перегрузок. Тип возврата не относится к вам, так как только тип возврата - это то, что вам нужно.
Определяет псевдосостояние выхода без входа или выхода:
template | ; |
Event const&
;Определяет псевдосостояние выхода с поведением входа:
template | ; |
Event const&,Expr1 const&
;Определяет псевдо-состояние выхода с поведением входа и выхода:
template | ; |
Event const&,Expr1 const&,Expr2
const&
;Определяет псевдосостояние выхода с поведением входа, выхода и атрибутами:
template ) | ; |
Event const&,Expr1 const&, Expr2 const&,
Attributes const&
;Определяет псевдосостояние выхода с входом, поведением выхода, атрибутами и конфигурацией (отложенные события, флаги):
template ) | ; |
Event const&,Expr1 const&, Expr2 const&,
Attributes const&, Configure const&
;Определяет псевдосостояние выхода с входом, поведением выхода, атрибутами, конфигурацией (отложенные события, флаги) и базовым состоянием:
template ) | ; |
Event const&,Expr1 const&, Expr2 const&,
Attributes const&, Configure const&, Base
;Обратите внимание, что эта функция требует, чтобы класс дополнительных параметров StateNameTag разъяснял состояния, имеющие те же параметры, но все еще отличающиеся.
Основной тип событий с eUML.
template <class EventName> euml_event; {
}
struct play : euml_event<play>{};
Основной тип для государств с 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.
template <class FlagName> euml_flag; {
}
struct PlayingPaused: euml_flag<PlayingPaused>{};
Основной тип для состояний или переходных поведений и охранников с 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.
template <class ConfigName> euml_config; {
}
Обычно вы не используете этот тип напрямую, а вместо этого используете предопределенную конфигурацию:
no_исключение: отключить улов исключения
no_msg_queue: отключить очередь сообщений. Очередь сообщений позволяет отправлять событие для обработки во время обработки события.
отложенные_события: вручную включить обработку отложенных событий
Тип возвращают грамматические парсеры, если грамматика недействительна. Увидеть этот тип приведет к статическому утверждению.
Тип держателя для использования в поведении входа / выхода или перехода, который абсолютно ничего не делает.
Общий объект или функция для исходного состояния данного перехода:
как объект: возвращает по ссылке исходное состояние перехода, обычно используемое другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION).
Пример:
some_user_function_(source_)
как функция: возвращает по ссылке атрибут, переданный в качестве параметра.
Пример:
source_(m_counter)++
Общий объект или функция для целевого состояния данного перехода:
как объект: возвращает по ссылке целевое состояние перехода, обычно используемое другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION).
Пример:
some_user_function_(target_)
как функция: возвращает по ссылке атрибут, переданный в качестве параметра.
Пример:
target_(m_counter)++
Общий объект или функция для состояния заданного поведения входа/выхода. state_ означает source_ в контексте поведения выхода и target_ в контексте поведения входа:
в качестве объекта: возвращает по ссылке текущее состояние, обычно используемое другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION).
Пример:
some_user_function_(state_) // вызывает некоторую_user_function на текущее состояние
как функция: возвращает по ссылке атрибут, переданный в качестве параметра.
Пример:
state_(m_counter)++
Общий объект или функция для события, запускающего данный переход (действительны в поведении перехода, а также в поведении входа/выхода состояния):
как объект: возвращает по ссылке событие перехода, обычно используемое другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION).
Пример:
some_user_function_(event_)
как функция: возвращает по ссылке атрибут, переданный в качестве параметра.
Пример:
event_(m_counter)++
Общий объект или функция для государственной машины, содержащей данный переход:
как объект: возвращает по ссылке событие перехода, обычно используемое другой функцией (обычно созданной MSM_EUML_METHOD или MSM_EUML_FUNCTION).
Пример:
some_user_function_(fsm_)
как функция: возвращает по ссылке атрибут, переданный в качестве параметра.
Пример:
fsm_(m_counter)++
Общий объект или функция, возвращающая состояние данной машины состояния:
с 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_(substate_(my_state),cd_name_attribute)++
Функтор возвращается истинным для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Пример:
if_then_(True_(),/* some action always called*/)
Функтор, возвращающийся ложным для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Пример:
if_then_(False_(),/* some action never called */)
Функтор возвращает целое значение для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Пример:
target_(m_ringing_cpt) = Int_<RINGING_TIME>() // RINGING_TIME is a constant
Функтор возвращает значение шара для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Пример:
// look for 'S' in event.m_song [string_find_(event_(m_song),Char_<'S'>(),Size_t_<0>()) != Npos_<string>()]
Functor возвращает значение size_t для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Пример:
substr_(event_(m_song),Size_t_<1>()) // returns a substring of event.m_song
Функтор возвращает строку для переходного или государственного поведения. Как и все константы, существует только форма функтора, поэтому необходимы скобки. Требуется повышение >= 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'> >())
Этот функтор 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>())
Эта функция отправляет событие на 4 машины состояний, вызывая на них process_event
:
process_(some_event)
: обрабатывает событие в текущей (содержащей) машине состояния.
process_(some_event [,fsm1...fsm4])
: процессы одного и того же события в 1-4 состояниях машины прошли в качестве аргумента.
Эта функция отправляет событие на 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_active
на машине текущего состояния или в качестве параметра:
is_flag_(some_flag)
: вызывает is_flag_active
на текущей (содержащей) машине состояния.
is_flag_(some_flag, some_fsm)
:звонки is_flag_active
на машине состояния. перешел в качестве аргумента.
Этот объект отсрочивает текущее событие, вызывая defer_event
на машине текущего состояния. Пример:
Empty() + play() / defer_
Используемый в качестве цели перехода, вызывает явный вход в данное состояние из данной подмашины. Несколько эксплицитных_ в качестве целей, разделенных запятыми, означают вилку. Государство должно быть объявлено как таковое с использованием BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE.
Используемый в качестве мишени перехода от содержащей состояние машины, вызывает ввод субмашинного имени с использованием данного входного псевдо-состояния. Это состояние должно быть объявлено как псевдозапись с использованием BOOST_MSM_EUML_ENTRY_STATE.
Используемый в качестве источника перехода из содержащей состояние машины, вызывает оставление субмашинного имени с использованием данного выхода псевдо-состояния. Это состояние должно быть объявлено как псевдовыход с использованием BOOST_MSM_EUML_EXIT_STATE.
Этот макрос создает функцию 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>())
Этот макрос создает функцию 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(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. Это необходимо там, где требуется тип (обычно с помощью метода back-end is_flag_active). Например:
fsm.is_flag_active<BOOST_MSM_EUML_FLAG_NAME(CDLoaded)>()
Этот макрос объявляет атрибут, называемый event-name типа event-type. Этот атрибут может быть включен в список атрибутов с помощью BOOST_. MSM_EUML_ATTRIBUTES.
Этот макрос объявляет список атрибутов, называемый атрибутами, основанный на выражении в качестве первого аргумента. Эти атрибуты затем могут быть сделаны частью события, используя 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)
Этот макрос определяет тип события (event-instance-name_helper) и объявляет константный экземпляр этого типа события, называемый event-instance-name, для использования в таблице переходов или поведения состояния.
Этот макрос определяет тип события (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 или 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;
Этот макрос определяет тип состояния (state-instance-name_helper) и объявляет константный экземпляр этого типа состояния, называемый state-instance-name, для использования в таблице переходов или поведения состояния.
Существует несколько возможных вариантов синтаксиса выражения:
(): состояние без действия входа или выхода.
(Expr1): состояние с входом, но без выхода.
(Expr1,Expr2): состояние с действием входа и выхода.
(Expr1,Expr2,Атрибуты): состояние с действием входа и выхода, определяющее некоторые атрибуты.
(Expr1,Expr2,Attributes,Configure): состояние с действием входа и выхода, определение некоторых атрибутов и флагов (стандартные флаги МСМ) или отложенных событий (стандартные события с отсрочкой МСМ).
(Expr1,Expr2,Attributes,Configure,Base): состояние с действием входа и выхода, определяющее некоторые атрибуты, флаги и отложенные события (простые отложенные события msm) и базовое состояние без по умолчанию (как определено в стандарте MSM).
Этот макрос определяет тип состояния прерывания (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).
Этот макрос определяет конечный тип псевдосостояния (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).
Этот макрос определяет тип псевдосостояния выхода (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).
Обратите внимание, что переадресованное событие должно быть сконструировано из события, отправленного подмашиной, содержащей точку выхода.
Этот макрос определяет тип входного псевдо-состояния (state-instance-name_helper) и объявляет константный экземпляр этого типа состояния, называемый state-instance-name, для использования в таблице переходов или поведения состояния.
Существует несколько возможных вариантов синтаксиса выражения:
(): вход псевдосостояние без действия входа или выхода.
(Expr1): вход псевдосостояние с входом, но без действия выхода.
(Expr1,Expr2): вход псевдо-состояние с действием входа и выхода.
(Expr1,Expr2,Атрибуты): вход псевдосостояние с действием входа и выхода, определяющим некоторые атрибуты.
(Expr1,Expr2,Attributes,Configure): вход псевдосостояние с действием входа и выхода, определение некоторых атрибутов и флагов (стандартные флаги МСМ) или отложенных событий (стандартные события с отсрочкой МСМ).
(Expr1,Expr2,Attributes,Configure,Base): вход псевдосостояние с действием входа и выхода, определение некоторых атрибутов, флагов и отложенных событий (простые отложенные события msm) и непо умолчанию базовое состояние (как определено в стандарте MSM).
Этот макрос определяет тип субмашины (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 или другими макросами состояния. Это нужно там, где требуется тип (обычно с помощью функции бэкэнда). Например:
fsm.get_state<BOOST_MSM_EUML_STATE_NAME(StringFind)&>().some_state_function();
Как и BOOST_MSM_EUML_STATE, но не предоставляет пример, а просто декларацию типа.
Как и BOOST_MSM_EUML_INTERRUPT_STATE, но не предоставляет пример, просто объявление типа.
Как и BOOST_MSM_EUML_TERMINATE_STATE, но не предоставляет пример, просто объявление типа.
Как и BOOST_MSM_EUML_EXIT_STATE, но не предоставляет пример, а просто декларацию типа.
Как и BOOST_MSM_EUML_ENTRY_STATE, но не предоставляет пример, а просто декларацию типа.
Как и BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE, но не предоставляет пример, просто объявление типа.
Этот макрос объявляет тип таблицы перехода, а также константный экземпляр таблицы, который затем может использоваться в объявлении машины состояния (см. BOOST_MSM_EUML_DECLARE_STATE_MACHINE). Выражение должно следовать грамматике таблицы перехода .
Как и BOOST_MSM_EUML_TRANSITION_TABLE, но не предоставляет пример, а просто декларацию типа.
Этот макрос объявляет тип переходной таблицы, а также константный экземпляр таблицы. Выражение должно следовать грамматике таблицы перехода . На данный момент этот макрос не используется.
Как и 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 ::
реклама |