![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
The Boost Statechart Library - ReferenceBoost , ,
|
Удар | Type | Решение |
cpc.my_tabler() |
S & |
A reference to the scheduler |
cpc.my_handle() |
S::processor_handle |
Обработок, идентифицирующий объект event_processor<> |
Чтобы защитить от злоупотреблений, все члены S::processor_context
должны быть объявлены частными. В результате event_processor<>
должен быть другом S::processor_context
.
Тип FifoWorker определяет следующее:
Для типа FifoWorker F
объект f
этого типа, const
объект cf
этого типа, объект функции без параметра w
произвольного типа и неподписанный длинный
значение n
следующие выражения/ведомости должны быть хорошо сформированы и иметь указанные результаты:
Условие/выражение | Type | Следы/результаты |
F::work_item |
загрузка::функция0< пустота > |
|
F() или F(ложно) |
F |
Конструирует объект неблокирования (см. ниже) типа FifoWorker. В однонаправленных сборках второе выражение не хорошо сформировано |
F (истинный) |
F |
Конструирует объект блокирования (см. ниже) типа FifoWorker. Не хорошо сформированные в однонаправленных сборках |
f.queue_work_item( w ); |
Конструкция и очередь объекта типа F::work_item , пройдя w как единственный аргумент |
|
f.terminate(); |
Создает и очерчивает объект типа F::work_item , который, когда позднее выполняется в operator() , приводит к модификации внутреннего состояния, так что terminated() отныне возвращается true |
|
cf.terminated(); |
бол |
Правда , если terminate() был назван и полученный элемент работы был выполнен в operator() . Returns false в противном случаеMust называют только из нити, которая также называет operator() |
f(n); |
неподписанный длинный |
Включает петлю, которая, с каждым циклом, задает и звонит operator() на старейшем элементе работы в очереди. Перевод оставлен, и количество выполненных работ возвращается, если выполняется одно или несколько из следующих условий:
Если очередь пуста и ни одно из вышеперечисленных условий не выполнено, то нить вызова f.terminated() == true
n != 0 и количество обрабатываемых с тех пор работoperator()() было названо равнымn .If the queue is empty and none of the above conditions are met
then the thread calling |
f(); |
неподписанный длинный |
Имеет точно такую же семантику, как f(n); с n == 0 (см. выше) |
Тип Исключения Транслятора определяет, как исключения C++, происходящие во время работы государственной машины, переводятся на события исключения.
Для объекта Исключения Транслятора et
, объект без параметра функции a
произвольного типа, возвращающегося результат
и объект функции eh
произвольного типа, принимающего const event_base &
параметр и возвращающийся результ
, следующее выражение должно быть хорошо сформировано и иметь указанные результаты:
Удар | Type | Следы/результаты |
et( a, eh ); |
результат |
return a();
a() распространяется исключение, исключение поймано.eh , проходя подходящую стек-выделенную модель. Понятие событияeh |
Тип StateBase является общей базой всех состояний данного типа машины состояния. state_machine<>::state_base_type
является моделью концепции StateBase.
Для типа StateBase S
и const
объект cs
этого типа следующие выражения должны быть хорошо сформированы и иметь указанные результаты:
Удар | Type | Решение |
cs.outer_state_ptr() |
const S * |
0 если cs является самым большим состоянием, указателем на прямое внешнее состояние cs иначе |
cs.dynamic_type() |
S::id_type |
Значение однозначно идентифицирует наиболее производный тип cs . S::id_type значения сопоставимы с значениями operator==() и operator!=() . Неопределенный порядок коллекционирования может быть установлен с std::less< S::id_type > . В отличие от typeid(cs) , эта функция доступна даже на платформах, которые не поддерживают C++ RTTI (или были настроены не поддерживать ее) |
cs.custom_dynamic_type_ptr< |
const Type * |
Указатель на пользовательский идентификатор типа или 0 . Если != 0 , Type должно соответствовать типу ранее установленного указателя. Эта функция доступна только в том случае, если BOOST_STATECHART_USE_NATIVE_RTTI не определено |
Тип простого состояния определяет одно состояние определенной государственной машины.
Для простого государства типа S
и указателя pS
, указывающего на объект типа S
, выделенный new
, следующие выражения/ведомости должны быть хорошо сформированы и иметь указанные эффекты/результаты:
Условие/выражение | Type | Effects/Result/Notes |
simple_state< |
simple_state< S, C, I, h > должно быть однозначной публичной базой S . См. simple_state<> документацию для требований и семантики C , I и h |
|
new S() |
S * |
Введите состояние S . Некоторые функции не должны быть названы из S::S() , см. simple_state<> документацию для получения дополнительной информации |
pS->exit(); |
Выходит из состояния S (первый этап). Определение функции exit в рамках моделей концепции простого государства является необязательным, поскольку simple_state<> уже определяет следующего публичного члена: void выход() {} . exit() не называется, когда государство выходит, в то время как исключение находится на рассмотрении, см. simple_state<>::terminate() для получения дополнительной информации |
|
Удалить pS; |
Выходит из состояния S (второй этап) |
|
S::реакции |
mpl::list<> , которая либо пуста, либо содержит мгновенные сообщения custom_reaction , in_state_reaction , deferral , termination или transition класс шаблонов. Если есть только одна реакция, то она также может быть typedef непосредственно, без обертывания его в mpl::list<> |
Заявление реакций члена typedef в рамках моделей концепции SimpleState является необязательным, поскольку simple_state<> уже определяет следующего публичного члена: typedef mpl::list<> реакции; |
Государство - это улучшение простое состояние (то есть, за исключением конструктора по умолчанию, государственный тип также должен удовлетворять требованиям простого государства). Для государственного типа S
указатель pS
типа S *
указывающий на объект типа S
, выделенный с new
, и объект mc
типа состояние< S, C, I, h >
::my_context
Должны быть четко сформулированы следующие выражения/заявления:
Условие/выражение | Type | Effects/Result/Notes |
государство< S, C, I, h > * |
state< S, C, I, h > должно быть однозначной публичной базой S . См. состояние<> документация для требований и семантики С , I и h |
|
new S( mc) |
S * |
Включает состояние S . Никаких ограничений в отношении функций, которые можно назвать из S::S() (в отличие от конструкторов моделей концепции простого государства). mc должно быть отправлено в государство< S, C, I, h >::state() |
A Тип события определяет событие, для которого государственные машины могут определять реакции.
Для события типа E
и указателя pCE
типа const E *
, указывающего на объект типа E
, выделенный с new
, следующие выражения/ведомости должны быть хорошо сформированы и иметь указанные эффекты/результаты:
Условие/выражение | Type | Effects/Result/Notes |
const event< E > * pCB = pCE; |
event< E > должно быть однозначной публичной базой E |
|
новый E(*pCE) |
E * |
Делает копию pE |
state_machine
Это шаблон базового класса всех синхронных государственных машин.
state_machine
parametersТамплита параметр | Запросы | Семантии | Дефолт |
Последний |
Самый производный подтип этого шаблона класса | ||
InitialState |
Модель SimpleState или State понятий. Аргумент Context перешел к simple_state<> или state<> основание InitialState должно быть MostDerived . То есть, InitialState должно быть самым большим состоянием этой государственной машины |
Состояние, которое введено, когда state_machine<> называется |
|
Аллокат |
Модель стандартной концепции Allocator | Allocator::rebind<>::other используется для распределения и размещения всех объектов simple_state подтипа и внутренних объектов динамической продолжительности хранения |
std::allocator<пустошить > |
Захват переводчика |
Модель концепции Исключения Транслятора | Концепция ExceptionTranslator | null_ exceptionion_translator |
state_machine
synopsisnamespace boost { namespace statechart { template< class MostDerived, class InitialState, class Allocator = std::allocator< void >, class ExceptionTranslator = null_exception_translator > class state_machine : noncopyable { public: typedef MostDerived outermost_context_type; void initiate(); void terminate(); bool terminated() const; void process_event( const event_base & ); template< class Target > Target state_cast() const; template< class Target > Target state_downcast() const; // a model of the StateBase concept typedef implementation-defined state_base_type; // a model of the standard Forward Iterator concept typedef implementation-defined state_iterator; state_iterator state_begin() const; state_iterator state_end() const; void unconsumed_event( const event_base & ) {} protected: state_machine(); ~state_machine(); void post_event( const intrusive_ptr< const event_base > & ); void post_event( const event_base & ); const event_base * triggering_event() const; }; } }
state_machine
constructor and
destructorstate_machine();
Эффекты: Конструирует непрокатную государственную машину
~state_machine();
Эффекты: Разлагает действующее в настоящее время внешнее состояние и все его прямые и косвенные внутренние состояния. Самые внутренние состояния сначала разрушены. Другие состояния разрушаются, как только разрушаются все их прямые и косвенные внутренние состояния. Внутренние состояния каждого государства разрушаются по количеству их ортогональной области. Состояние в ортогональной области с наибольшим числом всегда разрушается сначала, затем государство в регионе со вторым по величине числом и так далее
Note: Не пытается назвать какие-либо функции exit
state_machine
modifier functionsvoid initiate();
Следы:
terminate()
action
с возвращающимся без параметраoperator()()
result
, которыйInitialState
InitialState
глубины, входит первое. Внутренние состояния каждого состояния вводятся по числу их ортогональной области. Государство в ортогональной области 0 всегда вводится сначала, затем государство в области 1 и так далее.exceptionEventHandler
сoperator()()
возвращающимсяresult
и принимающим параметр события исключения, который обрабатывает пройденное событие исключения, со следующими отличиями от обработки нормальных событий:exit
.exceptionEventHandler
(то естьExceptionTranslator
является, а не, используемым для перевода исключений, выбрасываемых при обработке события исключения).result
объект возвращается равным возвращенномуsimple_state<>::discard_event()
.action
иexceptionEventHandler
доExceptionTranslator::operator()()
. ЕслиExceptionTranslator::operator()()
бросает исключение, исключение распространяется на вызывающего. Если абонент улавливает исключение, то в настоящее время активное внешнее состояние и все его прямые и косвенные внутренние состояния разрушаются. Сначала уничтожаются внутренние состояния. Другие состояния разрушаются, как только уничтожаются все их прямые и косвенные внутренние состояния. Внутренние состояния каждого состояния разрушаются по числу их ортогональной области. Государство в ортогональной области с наибольшим числом всегда сначала разрушается, затем государство в области со вторым по величине числом и так далее. Продолжение этапа 5 в противном случае (возвратное значение отбрасывается)process_event()
). Возвращается к абоненту, если больше нет опубликованных событийThrows: Любые исключения распространяются из ExceptionTranslator::operator()
. Исключения никогда не происходят в самой библиотеке, но только в коде, поставляемом через параметры шаблона:
Allocator::rebind<>::other::allocate()
react
Функции членовexit
Функции членовvoid terminate();
Следы:
action
с возвратом без параметраoperator()()
result
, которыйзавершаетв настоящее время активное внешнее состояние, отбрасывает все оставшиеся события и очищает всю информацию об истории.exceptionEventHandler
сoperator()()
возвратомresult
и принятием параметра события исключения, который обрабатывает пройденное событие исключения, со следующими отличиями от обработки нормальных событий:exit
.exceptionEventHandler
(то естьExceptionTranslator
является, а не, используемым для перевода исключений, выбрасываемых при обработке события исключения).result
объект возвращается равным возвращенномуsimple_state<>::discard_event()
.action
иexceptionEventHandler
доExceptionTranslator::operator()()
. ЕслиExceptionTranslator::operator()()
бросает исключение, исключение распространяется на вызывающего. Если абонент улавливает исключение, то в настоящее время активное внешнее состояние и все его прямые и косвенные внутренние состояния разрушаются. Сначала уничтожаются внутренние состояния. Другие состояния разрушаются, как только уничтожаются все их прямые и косвенные внутренние состояния. Внутренние состояния каждого состояния разрушаются по числу их ортогональной области. Государство в ортогональной области с наибольшим числом всегда сначала разрушается, затем государство в области со вторым по величине числом и так далее. В противном случае возвращается к абонентуThrows: Любые исключения распространяются из ExceptionTranslator::operator()
. Исключения никогда не происходят в самой библиотеке, но только в коде, поставляемом через параметры шаблона:
Allocator::rebind<>::other::allocate()
react
Функции членовexit
Функции членовvoid process_event( const event_base & );
Следы:
currentEvent
)action
с возвращающимсяresult
без параметровoperator()()
, который делает следующее:currentEvent
, начиная с текущего внутреннего состояния и двигаясь наружу, пока не будет найдено состояние, определяющее реакцию для события. Возвращениеsimple_state<>::forward_event()
, если не было найдено никакой реакцииsimple_state<>::forward_event()
, то возобновляется поиск реакции (этап а). Возвращает результат реакции в противном случаеexceptionEventHandler
, возвращающийresult
и принимающий параметр события исключения, который обрабатывает пройденное событие исключения, со следующими отличиями от обработки нормальных событий:exit
.exceptionEventHandler
(то естьExceptionTranslator
является, а не, используемым для перевода исключений, выбрасываемых при обработке события исключения).result
объект возвращается равным возвращенномуsimple_state<>::discard_event()
.action
иexceptionEventHandler
доExceptionTranslator::operator()()
. ЕслиExceptionTranslator::operator()()
бросает исключение, исключение распространяется на вызывающего. Если абонент улавливает исключение, то в настоящее время активное внешнее состояние и все его прямые и косвенные внутренние состояния разрушаются. Сначала уничтожаются внутренние состояния. Другие состояния разрушаются, как только уничтожаются все их прямые и косвенные внутренние состояния. Внутренние состояния каждого состояния разрушаются по числу их ортогональной области. Государство в ортогональной области с наибольшим числом всегда сначала разрушается, затем государство в области со вторым по величине числом и так далее. Далее следует шаг 7ExceptionTranslator::operator()()
равна единицеsimple_state<>::forward_event()
, то этап 3 продолжается.ExceptionTranslator::operator()()
равноsimple_state<>::defer_event()
, то значение возвратаcurrentEvent.intrusive_from_this()
сохраняется в очереди отложенных событий. Продолжение шага 11ExceptionTranslator::operator()()
равна единицеsimple_state<>::discard_event()
, то она продолжается с шагом 11.static_cast< MostDerived * >( this
)->unconsumed_event( currentEvent )
. Еслиunconsumed_event()
бросает исключение, исключение распространяется на вызывающего. Такое исключение никогда не приводит к разрушению каких-либо государств (в отличие от исключений, распространяемых изExceptionTranslator::operator()()
).currentEvent
и продолжает шаг. 2.Возврат к абоненту в противном случаеThrows: Любые исключения, распространяемые из Большинство заведенных::unconsumed_event()
или ExceptionTranslator()
. Исключения никогда не происходят в самой библиотеке, но только в коде, поставляемом через параметры шаблона:
Allocator::rebind<>::other::allocate()
react
Функции членовexit
Функции членовMostDerived::unconsumed_event()
void post_event( const intrusive_ptr< const event_base > & );
Эффекты: вставляет прошедшее событие в очередь событий
Throws: Любые исключения, распространяемые из Аллокат()
void post_event( const event_base & evt );
Effects: post_event(evt.intrusive_from_this() );
Throws: Любые исключения, распространяемые из Allocator::allocate()
void unconsumed_event( const event_base & evt );
Эффекты: Нет
Note: Эта функция (или, если она присутствует, так же называемая производная функция члена класса) называется процесс_event() всякий раз, когда отправленное событие не вызвало реакцию, см. процесс_event() эффекты, точка 10 для получения дополнительной информации.
state_machine
observer functionsbool terminated() const;
Возвращение:Правда
, если машина прекращается. Returns false
в противном случае
Note: эквивалентно state_begin() == state_end()
template< class Target > Target state_cast() const;
Возвращение: В зависимости от формы Target
либо ссылка, либо указатель на const
если по крайней мере одно из действующих в настоящее время состояний может быть успешно динамическое_cast
на Target
. Возвращает 0
для указателей и бросков std::bad_cast
для справочных целей в противном случае. Target
может принимать любую из следующих форм: const Class *
или const Class &
Throws: std::bad_cast
, если Target
не является исходным типом, и ни одно из активных состояний не может быть dynamic_cast
на Target
Note: последовательность поиска такая же, как для процесс_event
template< class Target > Target state_downcast() const;
Requires: Для справочных целей компилятор должен поддерживать частичную специализацию шаблонов класса, в противном случае будет получена ошибка компиляции-времени. Тип обозначается Target
должно быть моделью Симплуатация или Государство понятий
Возвращение: В зависимости от формы Таргет
либо ссылка, либо указатель на const
, если Таргет
равен наиболее выдающемуся типу действующего состояния. Возвращает 0
для указателей и бросков std::bad_cast
для справочных целей в противном случае. Target
может принимать любую из следующих форм: const Class *
или const Class &
Throws: std::bad_cast
если Target
является исходным типом, и ни одно из активных состояний не имеет наиболее производного типа, равного Target
Note: Последовательность поиска такая же, как и для процесс_event()
state_iterator state_begin() const;
state_iterator state_end() const;
Возвращение: Итератор объектов, диапазон [ состояния_begin()
, состояния_end()
) относится ко всем действующим в настоящее время внутренним состояниям. Для объекта i
типа state_iterator
, *i
возвращает const state_base_type &
и i.operator->()
возвращает const state_base_type *
Note: положение самого внутреннего состояния в диапазоне произвольно. Он может меняться с каждым вызовом к функции модулятора. Более того, все итераторы аннулируются всякий раз, когда функция модулятора называется
const event_base * triggering_event();
Возвращения: Указание на событие, вызвавшее реакцию, которая в настоящее время выполняется. Возвращает 0
, если не выполняется реакция или если текущая реакция была спровоцирована либо инициатом()
или термин()
asynchronous_state_machine
Это шаблон базового класса всех асинхронных государственных машин.
asynchronous_state_machine
parametersТамплита параметр | Запросы | Семантии | Дефолт |
Последний |
Самый производный подтип этого шаблона класса | ||
InitialState |
Модель SimpleState или State понятий. Аргумент Context передан simple_state<> или state<> основание InitialState должно быть MostDerived . То есть, InitialState должно быть самым большим состоянием этой государственной машины |
Состояние, которое введено, когда государственная машина инициируется через Scheduler объект |
|
Scheduler |
Модель концепции планировщика | см. Scheduler концепция | fifo_tabler<> |
Аллокат |
Модель стандартной концепции Allocator | std::allocator<пустошить > |
|
Захват переводчика |
Модель концепции Исключения Транслятора | Концепция ExceptionTranslator | null_ exceptionion_translator |
asynchronous_state_machine
synopsisnamespace boost { namespace statechart { template< class MostDerived, class InitialState, class Scheduler = fifo_scheduler<>, class Allocator = std::allocator< void >, class ExceptionTranslator = null_exception_translator > class asynchronous_state_machine : public state_machine< MostDerived, InitialState, Allocator, ExceptionTranslator >, public event_processor< Scheduler > { protected: typedef asynchronous_state_machine my_base; asynchronous_state_machine( typename event_processor< Scheduler >::my_context ctx ); ~asynchronous_state_machine(); }; } }
asynchronous_state_machine
constructor and
destructorasynchronous_state_machine( typename event_processor< Scheduler >::my_context ctx );
Эффекты: Строит нерующуюся асинхронную машину состояния
Note: Пользователи не могут создавать объекты asynchronous_state_machine>
подтипа непосредственно. Это можно сделать только через объект класса Scheduler
~asynchronous_state_machine();
Эффекты: Деструктурирует государственную машину
Note: Пользователи не могут уничтожить asynchronous_state_machine>
объекты подтипа напрямую. Это можно сделать только через объект класса Scheduler
event_processor
Это шаблон базового класса всех типов, которые обрабатывают события. asynchronous_state_machine<>
- это всего лишь одна возможная реализация процессора событий.
event_processor
parametersТамплита параметр | Запросы | Семантии |
Scheduler |
Модель концепции планировщика | см. Scheduler концепция |
event_processor
synopsisnamespace boost { namespace statechart { template< class Scheduler > class event_processor { public: virtual ~event_processor(); Scheduler & my_scheduler() const; typedef typename Scheduler::processor_handle processor_handle; processor_handle my_handle() const; void initiate(); void process_event( const event_base & evt ); void terminate(); protected: typedef const typename Scheduler::processor_context & my_context; event_processor( my_context ctx ); private: virtual void initiate_impl() = 0; virtual void process_event_impl( const event_base & evt ) = 0; virtual void terminate_impl() = 0; }; } }
event_processor
constructor and
destructorevent_processor( my_context ctx );
Эффекты: Конструирует объект процессора событий и хранит копии ссылки, возвращенной myContext.my_tabler()
, и объект, возвращенный myContext.my_handle()
Note: Пользователи не могут создавать объекты event_processor<>
подтипа непосредственно. Это можно сделать только через объект Scheduler
класс
virtual ~event_processor();
Эффекты: Деструктурирует объект процессора событий
Note: Пользователи не могут уничтожить event_процессор<>
объекты подтипа непосредственно. Это можно сделать только через объект класса Scheduler
event_processor
modifier functionsvoid initiate();
Эффекты: инициат_impl();
Throws: Любые исключения, распространяемые из реализации инициат_impl()
void process_event( const event_base & evt );
Эффекты: процесс_event_impl(evt);
Throws: Любые исключения, распространяемые из реализации процесс_event_impl()
void terminate();
Эффекты: terminate_impl();
Throws: Любые исключения, распространяемые из реализации terminate_impl()
event_processor
observer functionsScheduler & my_scheduler() const;
Возвраты: Шетулер
ссылка получена в конструкторе
processor_handle my_handle() const;
Возвращения: процессор_ручка
объект, полученный в конструкторе
fifo_scheduler
Этот шаблон класса является моделью концепции Scheduler.
fifo_scheduler
parametersТамплита параметр | Запросы | Семантии | Дефолт |
Фифомастер |
Модель концепции FifoWorker | Фифомастер концепция | fifo_worker<> |
Аллокат |
Модель стандартной концепции Allocator | std::allocator< void > |
fifo_scheduler
synopsisnamespace boost { namespace statechart { template< class FifoWorker = fifo_worker<>, class Allocator = std::allocator< void > > class fifo_scheduler : noncopyable { public: fifo_scheduler( bool waitOnEmptyQueue = false ); typedef implementation-defined processor_handle; class processor_context : noncopyable { processor_context( fifo_scheduler & scheduler, const processor_handle & theHandle ); fifo_scheduler & my_scheduler() const; const processor_handle & my_handle() const; friend class fifo_scheduler; friend class event_processor< fifo_scheduler >; }; template< class Processor > processor_handle create_processor(); template< class Processor, typename Param1 > processor_handle create_processor( Param1 param1 ); // More create_processor overloads void destroy_processor( processor_handle processor ); void initiate_processor( processor_handle processor ); void terminate_processor( processor_handle processor ); typedef intrusive_ptr< const event_base > event_ptr_type; void queue_event( const processor_handle & processor, const event_ptr_type & pEvent ); typedef typename FifoWorker::work_item work_item; void queue_work_item( const work_item & item ); void terminate(); bool terminated() const; unsigned long operator()( unsigned long maxEventCount = 0 ); }; } }
fifo_scheduler
constructorfifo_scheduler( bool waitOnEmptyQueue = false );
Effects: Строит объект fifo_tabler<>
. В многослойных сборках waitOnEmptyQue
направляется конструктору элемента данных типа FifoWorker
. В однонаправленных сборках FifoWorker
элемент данных по умолчанию структурирован по умолчанию
Note: В однонаправленных сборках fifo_tabler<>
конструктор не принимает никаких параметров и operator()
таким образом всегда возвращается к звонителю, когда очередь события пуста
fifo_scheduler
modifier functionstemplate< class Processor > processor_handle create_processor();
Требования: Процедур
тип должен быть прямым или косвенным подтипом event_процессора
шаблон класса
Эффекты: Создает и переходит к ФифоРабочий::queue_work_item()
объект типа ФифоРабочник_пункт
, когда позднее он выполняется в Фифооператор(оператор)
, приводит к вызову
Возвращение: процессор_handle
объект, который отныне идентифицирует созданный объект процессора событий
Throws: Любые исключения, распространяемые из FifoWorker::work_item()
и FifoWorker::queue_work_item()
Caution: Нынешнее выполнение этой функции вызывает глобальный оператор новый(3> Если глобальный
оператор новый()
не заменяется, необходимо позаботиться о том, когда можно назвать эту функцию в приложениях с жесткими требованиями в реальном времени
template< class Processor, typename Param1 > processor_handle create_processor( Param1 param1 );
Примечание: Исходный текст>
_>_1>
fifo_tabler<>
имеет 5 дополнительных создать_процессор<>
перегрузок, позволяющих передавать до 6 пользовательских аргументов конструкторам процессоров событий
Caution: Нынешнее внедрение этого и всех других перегрузок делает (прямые) звонки на глобальный оператор новый()
. Если глобальный оператор новый()
не будет заменен, необходимо позаботиться о том, когда называть эти перегрузки в приложениях с жесткими требованиями в реальном времени
void destroy_processor( processor_handle processor );
Запросы:процессор
был получен от вызова к одному из создатель_процессор<>()
перегрузка на том же fifo_tabler<>
объект
Effects: Создает и переходит к Фифоработ_item()
объект типа Фифуоператор_
Объект бесшумно отбрасывается, если объект процессора событий был уничтожен до
: Любые исключения, распространяемые из Фифоработер::work_item()
и FifoWorker::queue_work_item()
Caution: Нынешнее выполнение этой функции приводит к (прямому) призыву к глобальной оператору удалить()
(звонок сделан, когда последний объект процессор_handle
, связанный с объектом процессора события, уничтожен). Если глобальный оператор удаляет()
не заменяется, необходимо позаботиться о том, когда можно назвать эту функцию в приложениях с жесткими требованиями в реальном времени
void initiate_processor( processor_handle processor );
Запросы:процессор
был получен от вызова к одному из создатель_процессор()
перегрузки на один и тот же fifo_tabler<>
объект
Эффекты: Создает и переходит к ФифоРабочник::queue_work_item()
объекту типа Фифоработер_пункт
который, когда позже выполняется в <2Фифо> Объект бесшумно отбрасывается, если объект процессора событий был уничтожен до
Throws: Любые исключения распространяются из FifoWorker::work_item()
и FifoWorker::queue_work_item()
void terminate_processor( processor_handle processor );
Запросы:процессор
был получен от вызова к одному из создатель_процессор<>()
перегрузка на том же fifo_tabler<>
объект
Эффекты: Создает и переходит к Фифоработ_пункт()
объекту типа Фифооператор_пункт
Объект бесшумно отбрасывается, если объект процессора событий был уничтожен до
Throws: Любые исключения распространяются из FifoWorker::work_item()
и FifoWorker::queue_work_item()
void queue_event( const processor_handle & processor, const event_ptr_type & pEvent );
Реквизия: pEvent.get() != 0
и процессор
был получен от вызова к одному из создать_процессор<()
перегрузки на том же fifomap<>
объект
Эффекты Объект бесшумно отбрасывается, если объект процессора событий был уничтожен до
Throws: Любые исключения, распространяемые из ФифоРабочий::work_item()
и ФифоРабочий::queue_work_item()
void queue_work_item( const work_item & item );
Следы: ФифоРабочий::queue_work_item( item );
Throws: Любые исключения, распространяемые из приведенного выше звонка
void terminate();
Следы: ФифоРабочий::terminate()
Throws: Любые исключения, распространяемые из приведенного выше звонка
unsigned long operator()( unsigned long maxEventCount = 0 );
Требования: должно быть названо только из одной нити
Эффекты: ФифоРабочий::оператор()(maxEventCount)
Восстановления: Значение возврата приведенного выше вызова
Throws: Любые исключения, распространяемые из вышеуказанного звонка
fifo_scheduler
observer functionsbool terminated() const;
Requires: должен быть вызван только из нитки, которая также называет operator()()
Returns: FifoWorker::terminated();
exception_translator
Этот шаблон класса является моделью концепции ExceptionTranslator.
exception_translator
parametersТамплита параметр | Запросы | Семантии | Дефолт |
Исключение |
Модель Event концепция | Тип события, которое отправляется, когда исключение распространяется в рамки | исключение_толщина |
exception_translator
synopsis &
semanticsnamespace boost { namespace statechart { class exception_thrown : public event< exception_thrown > {}; template< class ExceptionEvent = exception_thrown > class exception_translator { public: template< class Action, class ExceptionEventHandler > result operator()( Action action, ExceptionEventHandler eventHandler ) { try { return action(); } catch( ... ) { return eventHandler( ExceptionEvent() ); } } }; } }
null_exception_translator
Этот класс является моделью концепции ExceptionTranslator.
null_exception_translator
synopsis &
semanticsnamespace boost { namespace statechart { class null_exception_translator { public: template< class Action, class ExceptionEventHandler > result operator()( Action action, ExceptionEventHandler ) { return action(); } }; } }
history_mode
Определяет тип истории государства.
namespace boost { namespace statechart { enum history_mode { has_no_history, has_shallow_history, has_deep_history, has_full_history // shallow & deep }; } }
simple_state
Это шаблон базового класса для всех моделей концепции SimpleState. Такие модели не должны называть ни одной из следующих функций simple_state<>
от их конструкторов:
void post_event( const intrusive_ptr< const event_base > & ); void post_event( const event_base & ); template< class HistoryContext, implementation-defined-unsigned-integer-type orthogonalPosition > void clear_shallow_history(); template< class HistoryContext, implementation-defined-unsigned-integer-type orthogonalPosition > void clear_deep_history(); outermost_context_type & outermost_context(); const outermost_context_type & outermost_context() const; template< class OtherContext > OtherContext & context(); template< class OtherContext > const OtherContext & context() const; template< class Target > Target state_cast() const; template< class Target > Target state_downcast() const; state_iterator state_begin() const; state_iterator state_end() const; const event_base * triggering_event() const;
Государства, которые должны назвать любую из этих функций-членов от своих конструкторов, должны исходить из шаблона класса состояния
.
simple_state
parametersТамплита параметр | Запросы | Семантии | Дефолт |
Последний |
Самый производный подтип этого шаблона класса | ||
Контекст |
Самый производный прямой или косвенный подтип state_machine или asynchronous_state_machine шаблоны класса или модель SimpleState или State концепции или мгновенная версия simple_state<>::orthogonal класс. Должно быть полный тип |
Определение позиции государств в государственной иерархии | |
InnerInitial |
mpl::list<> содержит модели SimpleState или State понятий или мгновенных сообщений shallow_history или deep_history классовые шаблоны. Если есть только одно внутреннее первоначальное состояние, которое не является мгновенным модулем шаблона, то оно также может быть передано непосредственно, не завернув его в mpl::list<> . Аргумент Context передан simple_state<> или state<> основание каждое состояние в списке должно соответствовать ортогональной области, к которой оно принадлежит. То есть первое состояние в списке должно пройти Большинство зарекомендовавших::orthogonal< 0 > , второе Большинство зареченных::orthogonal< 1 > и так далее. Большинстворекнутые::orthogonal< 0 > и Большинстворечные являются синонимами |
Определяет внутреннее начальное состояние для каждой ортогональной области. По умолчанию состояние не имеет внутренних состояний | неуказанные |
historyMode |
Одно из значений, определенных в history_mode |
Определяет, сохраняет ли государство мелкие, глубокие или обе истории при выходе | has_no_history |
simple_state
synopsisnamespace boost { namespace statechart { template< class MostDerived, class Context, class InnerInitial = unspecified, history_mode historyMode = has_no_history > class simple_state : implementation-defined { public: // by default, a state has no reactions typedef mpl::list<> reactions; // see template parameters template< implementation-defined-unsigned-integer-type innerOrthogonalPosition > struct orthogonal { // implementation-defined }; typedef typename Context::outermost_context_type outermost_context_type; outermost_context_type & outermost_context(); const outermost_context_type & outermost_context() const; template< class OtherContext > OtherContext & context(); template< class OtherContext > const OtherContext & context() const; template< class Target > Target state_cast() const; template< class Target > Target state_downcast() const; // a model of the StateBase concept typedef implementation-defined state_base_type; // a model of the standard Forward Iterator concept typedef implementation-defined state_iterator; state_iterator state_begin() const; state_iterator state_end() const; const event_base * triggering_event() const; void post_event( const intrusive_ptr< const event_base > & ); void post_event( const event_base & ); result discard_event(); result forward_event(); result defer_event(); template< class DestinationState > result transit(); template< class DestinationState, class TransitionContext, class Event > result transit( void ( TransitionContext::* )( const Event & ), const Event & ); result terminate(); template< class HistoryContext, implementation-defined-unsigned-integer-type orthogonalPosition > void clear_shallow_history(); template< class HistoryContext, implementation-defined-unsigned-integer-type orthogonalPosition > void clear_deep_history(); static id_type static_type(); template< class CustomId > static const CustomId * custom_static_type_ptr(); template< class CustomId > static void custom_static_type_ptr( const CustomId * ); // see transit() or terminate() effects void exit() {} protected: simple_state(); ~simple_state(); }; } }
simple_state
constructor and
destructorsimple_state();
Эффекты: Строит государственный объект
~simple_state();
Эффекты: Если государство имеет отсроченные реакции, по крайней мере одна из которых была спровоцирована в течение жизни государства, то содержимое очереди отложенных событий перемещается на переднюю часть выложенной очереди событий.
simple_state
modifier functionsvoid post_event( const intrusive_ptr< const event_base > & pEvt );
Требования: Если они называются от конструктора прямого или косвенного подтипа, то наиболее производный тип должен прямо или косвенно извлекать из состояния
шаблон класса. Все прямые и косвенные звонки должны быть нейтральными для исключения
Эффекты: outermost_context
().post_event(pEvt);
Throws
void post_event( const event_base & evt );
Требования: Если они называются от конструктора прямого или косвенного подтипа, то наиболее производный тип должен прямо или косвенно извлекать из состояния
шаблон класса. Все прямые и косвенные звонки должны быть нейтральными для исключения
Эффекты: outermost_context
().post_event(evt);
Throws
result discard_event();
Requires: должно быть названо только из react
функций-членов, которые называются custom_reaction<>
моментирования. Все прямые и косвенные звонящие должны быть нейтральными для исключения
Эффекты: Поручает государственной машине отказаться от текущего события и продолжить обработку оставшихся событий (см. state_machine<>::process_event()
для деталей)
Returns: A result
объект. Пользовательская функция react
должна вернуть этот объект своему звонителю
result forward_event();
Requires: должно быть названо только из react
функций-членов, которые называются custom_reaction<>
моментирования. Все прямые и косвенные звонящие должны быть нейтральными для исключения
Эффекты: Поручает государственной машине перенести текущее событие в следующее состояние (см. state_machine<>::process_event()
для деталей)
Returns: A result
объект. Пользовательская функция react
должна вернуть этот объект своему звонителю
result defer_event();
Requires: должно быть названо только из react
функций-членов, которые называются custom_reaction<>
моментирования. Все прямые и косвенные звонящие должны быть нейтральными для исключения
Эффекты: Поручает государственной машине отложить текущее событие и продолжить обработку оставшихся событий (см. state_machine<>::process_event()
для деталей)
Returns: A result
объект. Пользовательская функция react
участник должна вернуть этот объект своему звонителю
Throws: Любые исключения, распространяемые из Allocator::rebind<>::other::allocate()
(параметр шаблона передан базовому классу outermost_context_type
)
template< class DestinationState > result transit();
Requires: Должны быть вызваны только из react
функций-членов, которые называются custom_reaction<>
мгновенные сообщения. Все прямые и косвенные звонки должны быть нейтральными для исключения
Эффекты:
DestinationState
. Внутренние состояния выходят первыми. Другие состояния выходят, как только все их прямые и косвенные внутренние состояния выходят. Внутренние состояния каждого состояния выходят по числу их ортогональной области. Государство в ортогональной области с наибольшим числом всегда выходит первым, затем государство в области со вторым по величине числом и так далее.exit
функцию члена (см.синопсис) наиболее производного государственного объекта. Еслиexit()
бросок, то шаги 3 и 4 не выполняютсяDestinationState
или прямым или косвенным внешним состояниемDestinationState
.DestinationState
и выходит за пределы глубины. Внутренние состояния каждого состояния вводятся по числу их ортогональной области. Государство в ортогональной области 0 всегда вводится сначала, затем государство в области 1 и так далее.state_machine<>::process_event()
)Возвращения: A результат
объект. Пользовательская функция react
должна вернуть этот объект своему звонителю
Throws: Любые исключения, распространяемые из:
Allocator::rebind<>::other::allocate()
(параметр шаблона переходит в базовый классoutermost_context_type
)exit
Функции членовПредостережение: Неизбежно уничтожает это состояние перед возвращением к функции react
, которая, следовательно, не должна пытаться получить доступ к чему-либо, кроме стека объектов, прежде чем вернуться к своему звонителю
template< class DestinationState, class TransitionContext, class Event > result transit( void ( TransitionContext::* )( const Event & ), const Event & );
Requires: Должны быть вызваны только из react
функций-членов, которые называются custom_reaction<>
мгновенные сообщения. Все прямые и косвенные звонки должны быть нейтральными для исключения
Эффекты:
DestinationState
. Внутренние состояния выходят первыми. Другие состояния выходят, как только все их прямые и косвенные внутренние состояния выходят. Внутренние состояния каждого состояния выходят по числу их ортогональной области. Государство в ортогональной области с наибольшим числом всегда выходит первым, затем государство в области со вторым по величине числом и так далее.exit
функцию члена (см.синопсис) наиболее производного государственного объекта. Еслиexit()
бросок, то шаги 3 и 4 не выполняютсяDestinationState
или прямым или косвенным внешним состояниемDestinationState
.DestinationState
и выходит за пределы глубины. Внутренние состояния каждого состояния вводятся по числу их ортогональной области. Государство в ортогональной области 0 всегда вводится сначала, затем государство в области 1 и так далее.state_machine<>::process_event()
)Возвращения: A результат
объект. Пользовательская функция react
должна вернуть этот объект своему звонителю
Throws: Любые исключения, распространяемые из:
Allocator::rebind<>::other::allocate()
(параметр шаблона переходит в базовый классoutermost_context_type
)exit
Функции членовПредостережение: Неизбежно уничтожает это состояние перед возвращением к функции react
, которая, следовательно, не должна пытаться получить доступ к чему-либо, кроме стека объектов, прежде чем вернуться к своему звонителю
result terminate();
Requires: Должны быть вызваны только из react
функций-членов, которые называются custom_reaction<>
мгновенные сообщения. Все прямые и косвенные звонящие должны быть нейтральными для исключения
Эффекты: Исключает это состояние и все его прямые и косвенные внутренние состояния. Самые внутренние штаты выходят первыми. Другие состояния выходят, как только все их прямые и косвенные внутренние состояния были исключены. Внутренние состояния каждого государства выходят в соответствии с количеством их ортогональной области. Государство в ортогональной области с наибольшим количеством всегда выходит первым, затем государство в регионе со вторым по величине числом и так далее.
Процесс выхода из состояния состоит из следующих шагов:
exit
функцию члена (см.синопсис) наиболее производного государственного объекта. Еслиexit()
бросает, то шаги 3 и 4 не выполняются.Также поручает государственной машине отказаться от текущего события и продолжить обработку оставшихся событий (см. state_machine<>::process_event()
для деталей)
Returns: A result
объект. Пользовательская функция react
должна вернуть этот объект своему звонителю
Throws: Любые исключения распространяются из:
Allocator::rebind<>::other::allocate()
(параметр шаблона, переданный базовому классуoutermost_context_type
, используется для выделения пространства для сохранения истории)exit
Функции членовПримечание: Если это состояние является единственным в настоящее время активным внутренним состоянием его прямого внешнего состояния, то прямое внешнее состояние также прекращается. То же самое относится ко всем косвенным внешним состояниям
Осторожность: неизбежно уничтожает это состояние, прежде чем вернуться к функции react
, которая, следовательно, не должна пытаться получить доступ к чему-либо, кроме стека объектов, прежде чем вернуться к звонку
template< class HistoryContext, implementation-defined-unsigned-integer-type orthogonalPosition > void clear_shallow_history();
Requires: Если требуется от конструктора прямого или косвенного подтипа, то наиболее производный тип должен прямо или косвенно проистекать из шаблона класса состояния
. История
Аргумент передан simple_state<>
или state<>
основание История контекста
должно быть равно has_shallow_history
или hasful_l_history
Effects
template< class HistoryContext, implementation-defined-unsigned-integer-type orthogonalPosition > void clear_deep_history();
Requires: Если требуется от конструктора прямого или косвенного подтипа, то наиболее производный тип должен прямо или косвенно проистекать из шаблона класса состояния
. История
Аргумент передан simple_state<>
или state<>
основание HistoryContext
должно быть равно has_deep_history
или hasful_l_history
Effects
simple_state
observer functionsoutermost_context_type & outermost_context();
Requires: Если требуется от конструктора прямого или косвенного подтипа, то наиболее производный тип должен прямо или косвенно проистекать из шаблона класса состояния
. Если звонили из деструктора прямого или косвенного подтипа, то state_machine>
Подклассная часть должна существовать по-прежнему
Возвращения: ссылка на крайний контекст, который всегда является государственной машиной, к которой принадлежит это состояние
const outermost_context_type & outermost_context() const;
Requires: Если требуется от конструктора прямого или косвенного подтипа, то наиболее производный тип должен прямо или косвенно проистекать из шаблона класса состояния
. Если звонили из деструктора прямого или косвенного подтипа, то state_machine>
Подклассная часть должна существовать по-прежнему
Возвращения: ссылка на константный внешний контекст, который всегда является государственной машиной, это состояние принадлежит
template< class OtherContext > OtherContext & context();
Requires: Если требуется от конструктора прямого или косвенного подтипа, то наиболее производный тип должен прямо или косвенно извлекаться из шаблона класса состояния
. Если его называют деструктором прямого или косвенного подтипа с state_machine<>
в качестве аргумента, то state_machine<>
подклассная часть должна существовать
Returns: ссылка на прямой или косвенный контекст или любой публичный тип контекста
template< class OtherContext > const OtherContext & context() const;
Requires: Если требуется от конструктора прямого или косвенного подтипа, то наиболее производный тип должен прямо или косвенно извлекаться из шаблона класса состояния
. Если он называется от деструктора прямого или косвенного подтипа с state_machine<>
в качестве аргумента, то state_machine<>
субкласса должна существовать
Returns: ссылка на конст прямой или косвенный контекст или любой публичный базовый тип контекстов
template< class Target > Target state_cast() const;
Требования: Если он называется от конструктора прямого или косвенного подтипа, то самый производный тип должен прямо или косвенно происходить из шаблона состояния
класса
Возвращение: имеет точно такую же семантику, как состояние_machine<>::state_cast<>()
Throws: имеет точно такую же семантику, как _machine<> Результат Неуказанные, если эта функция называется, когда машина нестабильна
template< class Target > Target state_downcast() const;
Requires: Если требуется от конструктора прямого или косвенного подтипа, то наиболее производный тип должен прямо или косвенно проистекать из шаблона класса состояния
. Более того, состояния_machine<>::state_downcast<()
требования также применяются
Returns: Имеет точно такую же семантику, как state_machine<>::state_downcast<()<38>Throws: Имеет точно такую же семантику, как
состояние_machine<>state
state_iterator state_begin() const;
state_iterator state_end() const;
Require: Если он вызван конструктором прямого или косвенного подтипа, то наиболее выдающийся тип должен прямо или косвенно извлекать из шаблона состояния
класса
Возвращение: иметь точно такую же семантику, как состояние_machine<>::state_begin()
и state_machine<>::state_()
Note1> Результат Неуказанные, если эти функции называются, когда машина нестабильна
const event_base * triggering_event();
Возвращения: имеет точно такую же семантику, как state_machine>::triggering_event()
simple_state
static functionsstatic id_type static_type();
Возвращения: Значение, однозначно определяющее тип Большее значение
Note: id_type
значения сопоставимы с значениями operator==()
и operator!=()
. Неопределенный порядок коллекционирования может быть установлен с std::less< id_type >
template< class CustomId > static const CustomId * custom_static_type_ptr();
Запросы: Если установлен пользовательский идентификатор типа, то CustomId
должен соответствовать типу ранее установленного указателя
Возвращение: Указатель на пользовательский идентификатор типа для Большинство выведенных
или 0
Note: Эта функция недоступна, если BOOST_STATECHART_USE_NATIVE_RTTI
template< class CustomId > static void custom_static_type_ptr( const CustomId * );
Эффекты: устанавливает указателя к пользовательскому идентификатору типа для Самостоятельных
Note: Эта функция недоступна, если BOOST_STATECHART_USE_NATIVE_RTTI
state
Это шаблон базового класса для всех моделей концепции State. Такие модели обычно должны вызывать по крайней мере одну из следующих функций simple_state<>
членов от их конструкторов:
void post_event( const intrusive_ptr< const event_base > & ); void post_event( const event_base & ); template< class HistoryContext, implementation-defined-unsigned-integer-type orthogonalPosition > void clear_shallow_history(); template< class HistoryContext, implementation-defined-unsigned-integer-type orthogonalPosition > void clear_deep_history(); outermost_context_type & outermost_context(); const outermost_context_type & outermost_context() const; template< class OtherContext > OtherContext & context(); template< class OtherContext > const OtherContext & context() const; template< class Target > Target state_cast() const; template< class Target > Target state_downcast() const; state_iterator state_begin() const; state_iterator state_end() const; const event_base * triggering_event() const;
Государства, которые не должны называть какие-либо из этих функций-членов от своих конструкторов, скорее должны исходить из шаблона класса simple_state
, что спасает реализацию экспедиционного конструктора.
state
synopsisnamespace boost { namespace statechart { template< class MostDerived, class Context, class InnerInitial = unspecified, history_mode historyMode = has_no_history > class state : public simple_state< MostDerived, Context, InnerInitial, historyMode > { protected: struct my_context { // implementation-defined }; typedef state my_base; state( my_context ctx ); ~state(); }; } }
Прямой и косвенный подтипы состояния<>
должны предоставить конструктору ту же подпись, что и состояние<>
конструктор, пересылая контекстный параметр.
shallow_history
Этот шаблон класса используется для указания мелкой цели перехода истории или мелкого внутреннего начального состояния истории.
shallow_history
parametersТамплита параметр | Запросы | Семантии |
Государство |
Модель SimpleState или State понятий. Тип прошел как Контекст аргумент в пользу simple_state<> или state<> основание DefaultState должно пройти has_shallow_history или has_history как historyMode аргумент в свой simple_state<> |
Государство, которое введено, если неглубокая история недоступна |
shallow_history
synopsisnamespace boost { namespace statechart { template< class DefaultState > class shallow_history { // implementation-defined }; } }
deep_history
Этот шаблон класса используется для указания цели глубокого перехода истории или внутреннего начального состояния глубинной истории. Нынешняя глубокая реализация имеет некоторые ограничения.
deep_history
parametersТамплита параметр | Запросы | Семантии |
Государство |
Модель SimpleState или State понятий. Тип прошел как Контекст аргумент к simple_state<> или state<> основание DefaultState должно пройти has_deep_history или has_history как historyMode аргумент к его simple_state<> |
Государство, которое введено, если глубокая история недоступна |
deep_history
synopsisnamespace boost { namespace statechart { template< class DefaultState > class deep_history { // implementation-defined }; } }
event_base
Это общая основа всех событий.
event_base
synopsisnamespace boost { namespace statechart { class event_base { public: intrusive_ptr< const event_base > intrusive_from_this() const; typedef implementation-defined id_type; id_type dynamic_type() const; template< typename CustomId > const CustomId * custom_dynamic_type_ptr() const; protected: event_base( unspecified-parameter ); virtual ~event_base(); }; } }
event_base
constructor and destructorevent_base( unspecified-parameter );
Эффекты: Строит общую базовую часть мероприятия
virtual ~event_base();
Эффекты: Разлагает общую базовую часть события
event_base
observer functionsintrusive_ptr< const event_base > intrusive_from_this() const;
Возвращения: Еще один интрузивный_ptr< запорное событие_база >
референсирование это
иф это
уже упоминается интрузив_ptr<
. В противном случае возвращает intrusive_ptr< const event_base >
, ссылаясь на недавно созданную копию самого производного объекта
id_type dynamic_type() const;
Возвраты: Значение, однозначно идентифицирующее наиболее производный тип
Note: id_type
значения сопоставимы с значениями operator==()
и operator!=()
. Неопределенный порядок коллекционирования может быть установлен с std::less< id_type >
. В отличие от typeid(cs)
, эта функция доступна даже на платформах, которые не поддерживают C++ RTTI (или были настроены не поддерживать ее)
template< typename CustomId > const CustomId * custom_dynamic_type_ptr() const;
Запросы: Если установлен пользовательский идентификатор типа, то CustomId
должен соответствовать типу ранее установленного указателя
Возвращение: указатель на пользовательский идентификатор типа или 0
Note: Эта функция недоступна, если BOOST_STATECHART_USE_NATIVE_RTTI
event
Это шаблон базового класса всех событий.
event
parametersТамплита параметр | Запросы | Семантии | Дефолт |
Последний |
Самый производный подтип этого шаблона класса | ||
Аллокат |
Модель стандартной концепции Allocator | Allocator::rebind< MostDerived >::other используется для распределения и размещения всех объектов подтипа события динамической продолжительности хранения, см. operator new |
std::allocator<пустошить > |
event
synopsisnamespace boost { namespace statechart { template< class MostDerived, class Allocator = std::allocator< void > > class event : implementation-defined { public: static void * operator new( std::size_t size ); static void * operator new( std::size_t size, void * p ); static void operator delete( void * pEvent ); static id_type static_type(); template< class CustomId > static const CustomId * custom_static_type_ptr(); template< class CustomId > static void custom_static_type_ptr( const CustomId * ); protected: event(); virtual ~event(); }; } }
event
constructor and destructorevent();
Эффекты: Построить событие
virtual ~event();
Эффекты: Деструктирует событие
event
static functionsstatic void * operator new( std::size_t size );
Эффекты: Аллоктор::rebind< MostDerived >::other().allocate(1, static_cast< MostDerived * >( 0) );
Returns: Значение возврата приведенного выше звонка
Throws: Какой бы ни был вышеприведенный бросок
static void * operator new( std::size_t size, void * p );
Следы: Нет
Возврат: p
static void operator delete( void * pEvent );
Эффекты: Аллокатор::rebind< MostDerived >::other().deallocate(static_cast< MostDerived * > (pEvent), 1 );
static id_type static_type();
Возвращения: Значение, однозначно определяющее тип Большее значение
Note: id_type
значения сопоставимы с значениями operator==()
и operator!=()
. Неопределенный порядок коллекционирования может быть установлен с std::less< id_type >
template< class CustomId > static const CustomId * custom_static_type_ptr();
Запросы: Если установлен пользовательский идентификатор типа, то CustomId
должен соответствовать типу ранее установленного указателя
Возвращение: Указатель на пользовательский идентификатор типа для Большинство выведенных
или 0
Note: Эта функция недоступна, если BOOST_STATECHART_USE_NATIVE_RTTI
template< class CustomId > static void custom_static_type_ptr( const CustomId * );
Эффекты: устанавливает указателя к пользовательскому идентификатору типа для Самостоятельных
Note: Эта функция недоступна, если BOOST_STATECHART_USE_NATIVE_RTTI
transition
Этот шаблон класса используется для указания переходной реакции. Мгновения этого шаблона могут появиться в реакции
участник typedef
в моделях SimpleState и State понятий.
transition
parametersТамплита параметр | Запросы | Семантии | Дефолт |
Отправить |
Модель концепции Event или класса event_base |
Это событие запускает переход. Если указана event_base , переход инициируется всеми моделями концепции Event |
|
Дестинация |
Модель SimpleState или State понятий, любой из их типов общественной базы или мгновенная передача shallow_history или deep_history шаблонов класса. Исходное состояние (состояние, для которого этот переход определен) и Дестинация должно иметь общий прямой или косвенный контекст |
Государство назначения для перехода к | |
TransitionContext |
Общий контекст источника и Дестинация состояние |
Состояние, членом которого является переходное действие | неуказанные |
pTransitionAction |
Указатель на функцию члена TransitionContext . Функция члена должна принимать const Event & параметр и возврат void |
Переходное действие, которое выполняется во время перехода. По умолчанию не выполняется переходное действие | неуказанные |
transition
synopsisnamespace boost { namespace statechart { template< class Event, class Destination, class TransitionContext = unspecified, void ( TransitionContext::*pTransitionAction )( const Event & ) = unspecified > class transition { // implementation-defined }; } }
transition
semanticsПри исполнении одного из следующих призывов к членской функции государства, для которого была определена реакция, делается:
transit< Destination >()
Если переходное действие не указаноtransit< Destination >(
pTransitionAction,currentEvent)
, если было указано действие переходаin_state_reaction
Этот шаблон класса используется для указания внутренней реакции. Мгновения этого шаблона могут появиться в реакции
участник typedef
в моделях SimpleState и State понятий.
in_state_reaction
parametersТамплита параметр | Запросы | Семантии | Дефолт |
Отправить |
Модель концепции Event или класса event_base |
Это событие вызывает реакцию в состоянии. Если указана event_base , реакция в состоянии вызывается всеми моделями концепции Event |
|
Контекст реакции |
Либо государство, определяющее само состояние реакции, один из его прямых или косвенных контекстов или любой из их общественных типов | Состояние, в котором действие является членом | неуказанные |
pAction |
Указание на функцию члена ReactionContext . Функция члена должна принимать const Event & параметр и возврат void |
Действие, которое выполняется во время реакции государства | неуказанные |
in_state_reaction
synopsisnamespace boost { namespace statechart { template< class Event, class ReactionContext = unspecified, void ( ReactionContext::*pAction )( const Event & ) = unspecified > class in_state_reaction { // implementation-defined }; } }
in_state_reaction
semanticsПри исполнении происходит следующее:
pAction
называется, передавая событие запуска в качестве единственного аргумента.discard_event
членской функции государства, для которого была определена реакцияtermination
Этот шаблон класса используется для указания реакции прекращения. Мгновения этого шаблона могут появиться в реакции
участник typedef
в моделях SimpleState и State понятий.
termination
parametersТамплита параметр | Запросы | Семантии |
Отправить |
Модель концепции Event или класса event_base |
Событие, вызвавшее прекращение. Если указана event_base , прекращение запускается всеми моделями концепции Event |
termination
synopsisnamespace boost { namespace statechart { template< class Event > class termination { // implementation-defined }; } }
termination
semanticsПри исполнении вызывается функция terminate
члена государства, для которого была определена реакция.
deferral
Этот шаблон класса используется для указания отсроченной реакции. Мгновения этого шаблона могут появиться в реакции
участник typedef
в моделях SimpleState и State понятий.
deferral
parametersТамплита параметр | Запросы | Семантии |
Отправить |
Модель концепции Event или класса event_base |
Это событие вызывает отсрочку. Если указана event_base , отсрочка запускается всеми моделями концепции Event |
deferral
synopsisnamespace boost { namespace statechart { template< class Event > class deferral { // implementation-defined }; } }
deferral
semanticsПри исполнении звонят defer_event
функции члена государства, для которого была определена реакция.
custom_reaction
Этот шаблон класса используется для указания пользовательской реакции. Мгновения этого шаблона могут появиться в реакции
участник typedef
в моделях SimpleState и State понятий.
custom_reaction
parametersТамплита параметр | Запросы | Семантии |
Отправить |
Модель концепции Event или класса event_base |
Это событие вызывает настраиваемую реакцию. Если указана event_base , настраиваемая реакция вызывается всеми моделями концепции Event |
custom_reaction
synopsisnamespace boost { namespace statechart { template< class Event > class custom_reaction { // implementation-defined }; } }
custom_reaction
semanticsПри выполнении звонка производится к пользовательской функции react
члена состояния, для которого была определена реакция. Функция react
должна иметь следующую подпись:
result react( const Event & );
и должен вызвать ровно одну из следующих реакционных функций и вернуть полученный объект результат
:
result discard_event(); result forward_event(); result defer_event(); template< class DestinationState > result transit(); template< class DestinationState, class TransitionContext, class Event > result transit( void ( TransitionContext::* )( const Event & ), const Event & ); result terminate();
result
Определяет характер реакции, взятой в пользовательском дополнении react
функция члена (называемая когда выполняется custom_reaction
). Объекты этого типа всегда получают путем вызова одной из реакционных функций и должны быть немедленно возвращены из функции react
.
namespace boost { namespace statechart { class result { public: result( const result & other ); ~result(); private: // Result objects are not assignable result & operator=( const result & other ); }; } }
result
constructor and destructorresult( const result & other );
Запросы: другая
не потребляется
Следы: Копировать-конструирует новый результат
объект и отметины другая
по потреблению. То есть, результат
имеет деструктивную копировальную семантику
~result();
Запросы: это
помечено как потребленное
Эффекты: Деструктирует объект результата
Пересмотрен 06 ноября 2010 года
Copyright © 2003-2010 Andreas Huber Dönni
Distributed under the Boost Software License, Version 1.0. (См. сопроводительный файл LICENSE_1_0.txt или копия на http://www.boost.org/LICENSE_1_0.txt
Статья The Boost Statechart Library - Reference раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |