![]() |
![]() ![]() ![]() ![]() |
![]() |
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 synopsis
namespace 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, которыйInitialStateInitialStateглубины, входит первое. Внутренние состояния каждого состояния вводятся по числу их ортогональной области. Государство в ортогональной области 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 synopsis
namespace 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 synopsis
namespace 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 synopsis
namespace 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 &
semantics
namespace 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 &
semantics
namespace 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 synopsis
namespace 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 synopsis
namespace 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 synopsis
namespace 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 synopsis
namespace boost
{
namespace statechart
{
template< class DefaultState >
class deep_history
{
// implementation-defined
};
}
}
event_baseЭто общая основа всех событий.
event_base synopsis
namespace 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 synopsis
namespace 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 synopsis
namespace 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 synopsis
namespace 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 synopsis
namespace 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 synopsis
namespace 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 synopsis
namespace 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.
:: Главная :: ::
реклама |