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

The Boost Statechart Library - Reference

Boost , ,

Boost C++ Libraries

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

The Boost Statechart Library

Reference

Contents

Concepts
Scheduler
FifoWorker
ExceptionTranslator
StateBase
SimpleState
State
Event
state_machine.hpp
Class template state_machine
asynchronous_state_machine.hpp
Class template asynchronous_state_machine
event_processor.hpp
Class template event_processor
fifo_scheduler.hpp
Class template fifo_scheduler
exception_translator.hpp
Class template exception_translator
null_exception_translator.hpp
Class null_exception_translator
 
simple_state.hpp
Enum history_mode
Class template simple_state
state.hpp
Class template state
shallow_history.hpp
Class template shallow_history
deep_history.hpp
Class template deep_history
 
event_base.hpp
Class event_base
event.hpp
Class template event
 
transition.hpp
Class template transition
in_state_reaction.hpp
Class template in_state_reaction
termination.hpp
Class template termination
deferral.hpp
Class template deferral
custom_reaction.hpp
Class template custom_reaction
result.hpp
Class result

Concepts

Scheduler concept

A Тип планировщика определяет следующее:

  • Что передается конструкторам подтиповevent_processor<>и как управляется срок службы таких объектов
  • Может ли несколько объектов подтипаevent_processor<>разделять одну и ту же нить очереди и планировщика
  • Как события добавляются в очередь планировщиков
  • Как и стоит ли ждать новых событий, когда очередь планировщиков пустует
  • Используется ли и какой тип блокировки для обеспечения безопасности резьбы
  • Возможна ли очередь событий для уже не существующихevent_processor<>объектов подтипа и что происходит при обработке такого события
  • Что происходит, когда один из обслуживаемыхevent_processor<>объектов подтипа распространяет исключение

Для списка типа S и объекта cpc типа const S::processor_context следующие выражения должны быть хорошо сформированы и иметь указанные результаты:

Удар 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 concept

Тип 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иn != 0,оператор(),оператор(), [скрыто]n

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

Must будет называться только из одной нити

f.terminated() == true
  • Приложение однопоточное и внутренняя очередь пустая
  • Приложение многопоточное, внутренняя очередь пуста, а рабочий создан как неблокирующий.
  • n != 0и количество обрабатываемых с тех пор работoperator()()было названо равнымn.
  • If the queue is empty and none of the above conditions are met then the thread calling operator()() is put into a wait state until f.queue_work_item() is called from another thread.

    Must only be called from exactly one thread

    [ORIG_END] -->
    f(); неподписанный длинный Имеет точно такую же семантику, как f(n); с n == 0 (см. выше)

    ExceptionTranslator concept

    Тип Исключения Транслятора определяет, как исключения C++, происходящие во время работы государственной машины, переводятся на события исключения.

    Для объекта Исключения Транслятора et, объект без параметра функции a произвольного типа, возвращающегося результат и объект функции eh произвольного типа, принимающего const event_base & параметр и возвращающийся результ, следующее выражение должно быть хорошо сформировано и иметь указанные результаты:

    Удар Type Следы/результаты
    et( a, eh ); результат
    1. тиревернуть a();
    2. a()ширина покрывала, ширина покрывала,
    3. вместе с коллекарством струнных штандартовeh, включающим в себя струйную струнуСобытие
    4. eh[скрыто] [скрыто]
    Попытки совершитьreturn a();
  • Еслиa()распространяется исключение, исключение поймано.
  • Внутри блок улова вызываетeh, проходя подходящую стек-выделенную модель. Понятие события
  • Возвращает результатeh
  • [ORIG_END] -->

    StateBase concept

    Тип 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<
      Type >()
    const Type * Указатель на пользовательский идентификатор типа или 0. Если != 0, Type должно соответствовать типу ранее установленного указателя. Эта функция доступна только в том случае, если BOOST_STATECHART_USE_NATIVE_RTTI не определено

    SimpleState concept

    Тип простого состояния определяет одно состояние определенной государственной машины.

    Для простого государства типа S и указателя pS, указывающего на объект типа S, выделенный new, следующие выражения/ведомости должны быть хорошо сформированы и иметь указанные эффекты/результаты:

    Условие/выражение Type Effects/Result/Notes
    simple_state<
      S, C, I, h   * pB =
          pS;
      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<> реакции;

    State concept

    Государство - это улучшение простое состояние (то есть, за исключением конструктора по умолчанию, государственный тип также должен удовлетворять требованиям простого государства). Для государственного типа S указатель pS типа S * указывающий на объект типа S, выделенный с new, и объект mc типа состояние< S, C, I, h >::my_context Должны быть четко сформулированы следующие выражения/заявления:

    Условие/выражение Type Effects/Result/Notes
    государство< S, C, I, h > *
      pB=pS;
      state< S, C, I, h > должно быть однозначной публичной базой S. См. состояние<> документация для требований и семантики С, I и h
    new S( mc) S * Включает состояние S. Никаких ограничений в отношении функций, которые можно назвать из S::S() (в отличие от конструкторов моделей концепции простого государства). mc должно быть отправлено в государство< S, C, I, h >::state()

    Event concept

    A Тип события определяет событие, для которого государственные машины могут определять реакции.

    Для события типа E и указателя pCE типа const E *, указывающего на объект типа E, выделенный с new, следующие выражения/ведомости должны быть хорошо сформированы и иметь указанные эффекты/результаты:

    Условие/выражение Type Effects/Result/Notes
    const event< E > * pCB = pCE;   event< E > должно быть однозначной публичной базой E
    новый E(*pCE) E * Делает копию pE

    Header <boost/statechart/state_machine.hpp>

    Class template state_machine

    Это шаблон базового класса всех синхронных государственных машин.

    Class template 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

    Class template 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;
      };
    }
    }
    

    Class template state_machine constructor and destructor

    state_machine();
    

    Эффекты: Конструирует непрокатную государственную машину

    ~state_machine();
    

    Эффекты: Разлагает действующее в настоящее время внешнее состояние и все его прямые и косвенные внутренние состояния. Самые внутренние состояния сначала разрушены. Другие состояния разрушаются, как только разрушаются все их прямые и косвенные внутренние состояния. Внутренние состояния каждого государства разрушаются по количеству их ортогональной области. Состояние в ортогональной области с наибольшим числом всегда разрушается сначала, затем государство в регионе со вторым по величине числом и так далее
    Note: Не пытается назвать какие-либо функции exit

    Class template state_machine modifier functions

    void initiate();
    

    Следы:

    1. Звонкиterminate()
    2. Конструирует функциональный объектactionс возвращающимся без параметраoperator()()result, который
      1. входит (конструирует) состояние, указанное с параметром шаблонаInitialState
      2. В древо, образованное прямыми и косвенными внутренними начальными состояниямиInitialStateглубины, входит первое. Внутренние состояния каждого состояния вводятся по числу их ортогональной области. Государство в ортогональной области 0 всегда вводится сначала, затем государство в области 1 и так далее.
    3. Конструирует объект функцииexceptionEventHandlerсoperator()()возвращающимсяresultи принимающим параметр события исключения, который обрабатывает пройденное событие исключения, со следующими отличиями от обработки нормальных событий:
      • С момента, когда исключение было брошено до момента непосредственно после выполнения реакции события исключения, состояния, которые должны быть выведены, только разрушаются, но не называются функции членаexit.
      • Реакциявсегда начинается с самого внешнегонестабильного состояния.
      • Что касается обычных событий, то поиск реакции движется наружу, когда текущее состояние не может справиться с событием. Однако если внешнее состояние отсутствует (достигнутовнешнее состояние), поиск реакции считается безуспешным. То есть события исключения никогда не будут отправлены в ортогональные регионы, кроме той, которая вызвала событие исключения.
      • Если исключение выбрасывается во время поиска реакции на исключение или выполнения реакции, то исключение распространяется из объекта функцииexceptionEventHandler(то естьExceptionTranslatorявляется, а не, используемым для перевода исключений, выбрасываемых при обработке события исключения).
      • Если реакция на событие исключения не может быть найдена или если машина состояния не стабильна после обработки события исключения, первоначальное исключение переносится. В противном случаеresultобъект возвращается равным возвращенномуsimple_state<>::discard_event().
    4. actionиexceptionEventHandlerдоExceptionTranslator::operator()(). ЕслиExceptionTranslator::operator()()бросает исключение, исключение распространяется на вызывающего. Если абонент улавливает исключение, то в настоящее время активное внешнее состояние и все его прямые и косвенные внутренние состояния разрушаются. Сначала уничтожаются внутренние состояния. Другие состояния разрушаются, как только уничтожаются все их прямые и косвенные внутренние состояния. Внутренние состояния каждого состояния разрушаются по числу их ортогональной области. Государство в ортогональной области с наибольшим числом всегда сначала разрушается, затем государство в области со вторым по величине числом и так далее. Продолжение этапа 5 в противном случае (возвратное значение отбрасывается)
    5. Обработка всех опубликованных событий (см.process_event()). Возвращается к абоненту, если больше нет опубликованных событий

    Throws: Любые исключения распространяются из ExceptionTranslator::operator(). Исключения никогда не происходят в самой библиотеке, но только в коде, поставляемом через параметры шаблона:

    • Allocator::rebind<>::other::allocate()
    • государственные строители
    • reactФункции членов
    • exitФункции членов
    • переходные действия
    void terminate();
    

    Следы:

    1. Построение функционального объектаactionс возвратом без параметраoperator()()result, которыйзавершаетв настоящее время активное внешнее состояние, отбрасывает все оставшиеся события и очищает всю информацию об истории.
    2. Конструирует объект функцииexceptionEventHandlerсoperator()()возвратомresultи принятием параметра события исключения, который обрабатывает пройденное событие исключения, со следующими отличиями от обработки нормальных событий:
      • С момента, когда исключение было брошено до момента непосредственно после выполнения реакции события исключения, состояния, которые необходимо выйти, только разрушаются, но не называются функции членаexit.
      • Реакциявсегда начинается с самого внешнегонестабильного состояния.
      • Что касается обычных событий, то поиск реакции движется наружу, когда текущее состояние не может справиться с событием. Однако если внешнее состояние отсутствует (достигнутовнешнее состояние), поиск реакции считается безуспешным. То есть события исключения никогда не будут отправлены в ортогональные регионы, кроме той, которая вызвала событие исключения.
      • Если исключение выбрасывается во время поиска реакции на исключение или выполнения реакции, то исключение распространяется из объекта функцииexceptionEventHandler(то естьExceptionTranslatorявляется, а не, используемым для перевода исключений, выбрасываемых при обработке события исключения).
      • Если реакция на событие исключения не может быть найдена или если машина состояния не стабильна после обработки события исключения, первоначальное исключение переносится. В противном случаеresultобъект возвращается равным возвращенномуsimple_state<>::discard_event().
    3. actionиexceptionEventHandlerдоExceptionTranslator::operator()(). ЕслиExceptionTranslator::operator()()бросает исключение, исключение распространяется на вызывающего. Если абонент улавливает исключение, то в настоящее время активное внешнее состояние и все его прямые и косвенные внутренние состояния разрушаются. Сначала уничтожаются внутренние состояния. Другие состояния разрушаются, как только уничтожаются все их прямые и косвенные внутренние состояния. Внутренние состояния каждого состояния разрушаются по числу их ортогональной области. Государство в ортогональной области с наибольшим числом всегда сначала разрушается, затем государство в области со вторым по величине числом и так далее. В противном случае возвращается к абоненту

    Throws: Любые исключения распространяются из ExceptionTranslator::operator(). Исключения никогда не происходят в самой библиотеке, но только в коде, поставляемом через параметры шаблона:

    • Allocator::rebind<>::other::allocate()
    • государственные строители
    • reactФункции членов
    • exitФункции членов
    • переходные действия
    void process_event( const event_base & );
    

    Следы:

    1. Выберите пройденное событие в качестве текущего события (отсюда именуемоеcurrentEvent)
    2. Начало новойреакциипоиска
    3. Выбирает произвольное, но в этой реакции поиск еще не посетил состояние из всех ныне активныхвнутренних состояний. Если такого состояния не существует, то продолжается шаг 10.
    4. Конструирует функциональный объектactionс возвращающимсяresultбез параметровoperator()(), который делает следующее:
      1. Поиск реакции, подходящей дляcurrentEvent, начиная с текущего внутреннего состояния и двигаясь наружу, пока не будет найдено состояние, определяющее реакцию для события. Возвращениеsimple_state<>::forward_event(), если не было найдено никакой реакции
      2. Выполняет найденную реакцию. Если результат реакции равен возвратному значениюsimple_state<>::forward_event(), то возобновляется поиск реакции (этап а). Возвращает результат реакции в противном случае
    5. Конструирует объект функцииexceptionEventHandler, возвращающийresultи принимающий параметр события исключения, который обрабатывает пройденное событие исключения, со следующими отличиями от обработки нормальных событий:
      • С того момента, когда исключение было отброшено сразу после выполнения реакции события исключения, состояния, которые должны быть выведены, только разрушаются, но не называются функции членаexit.
      • Если машина состояния стабильна при обработке события исключения, то поиск реакции события исключения начинается с самого внутреннего состояния, которое последний раз посещалось во время последнего поиска реакции события (событие исключения было создано в результате этого обычного поиска реакции).
      • Если машина состоянийнестабильнапри обработке события исключения, то поиск реакции события исключения начинается с самого внешнегонестабильного состояния.
      • Что касается обычных событий, то поиск реакции движется наружу, когда текущее состояние не может справиться с событием. Однако если внешнее состояние отсутствует (достигнутовнешнее состояние), поиск реакции считается безуспешным. То есть события исключения никогда не будут отправлены в ортогональные регионы, кроме той, которая вызвала событие исключения.
      • Если исключение выбрасывается во время поиска реакции на исключение или выполнения реакции, то исключение распространяется из объекта функцииexceptionEventHandler(то естьExceptionTranslatorявляется, а не, используемым для перевода исключений, выбрасываемых при обработке события исключения).
      • Если реакция на событие исключения не может быть найдена или если машина состояния не стабильна после обработки события исключения, первоначальное исключение переносится. В противном случаеresultобъект возвращается равным возвращенномуsimple_state<>::discard_event().
    6. actionиexceptionEventHandlerдоExceptionTranslator::operator()(). ЕслиExceptionTranslator::operator()()бросает исключение, исключение распространяется на вызывающего. Если абонент улавливает исключение, то в настоящее время активное внешнее состояние и все его прямые и косвенные внутренние состояния разрушаются. Сначала уничтожаются внутренние состояния. Другие состояния разрушаются, как только уничтожаются все их прямые и косвенные внутренние состояния. Внутренние состояния каждого состояния разрушаются по числу их ортогональной области. Государство в ортогональной области с наибольшим числом всегда сначала разрушается, затем государство в области со вторым по величине числом и так далее. Далее следует шаг 7
    7. Если величина возвратаExceptionTranslator::operator()()равна единицеsimple_state<>::forward_event(), то этап 3 продолжается.
    8. Если значение возвратаExceptionTranslator::operator()()равноsimple_state<>::defer_event(), то значение возвратаcurrentEvent.intrusive_from_this()сохраняется в очереди отложенных событий. Продолжение шага 11
    9. Если величина возвратаExceptionTranslator::operator()()равна единицеsimple_state<>::discard_event(), то она продолжается с шагом 11.
    10. Звонкиstatic_cast< MostDerived * >( this )->unconsumed_event( currentEvent ). Еслиunconsumed_event()бросает исключение, исключение распространяется на вызывающего. Такое исключение никогда не приводит к разрушению каких-либо государств (в отличие от исключений, распространяемых изExceptionTranslator::operator()()).
    11. Если выложенная очередь событий не пуста, то выстраивает очередь первого события, выбирает его как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 для получения дополнительной информации.

    Class template state_machine observer functions

    bool 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, если не выполняется реакция или если текущая реакция была спровоцирована либо инициатом() или термин()

    Header <boost/statechart/
    asynchronous_state_machine.hpp>

    Class template asynchronous_state_machine

    Это шаблон базового класса всех асинхронных государственных машин.

    Class template 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

    Class template 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();  
      };
    }
    }
    

    Class template asynchronous_state_machine constructor and destructor

    asynchronous_state_machine(
      typename event_processor< Scheduler >::my_context ctx );
    

    Эффекты: Строит нерующуюся асинхронную машину состояния
    Note: Пользователи не могут создавать объекты asynchronous_state_machine> подтипа непосредственно. Это можно сделать только через объект класса Scheduler

    ~asynchronous_state_machine();
    

    Эффекты: Деструктурирует государственную машину
    Note: Пользователи не могут уничтожить asynchronous_state_machine> объекты подтипа напрямую. Это можно сделать только через объект класса Scheduler

    Header <boost/statechart/event_processor.hpp>

    Class template event_processor

    Это шаблон базового класса всех типов, которые обрабатывают события. asynchronous_state_machine<> - это всего лишь одна возможная реализация процессора событий.

    Class template event_processor parameters

    Тамплита параметр Запросы Семантии
    Scheduler Модель концепции планировщика см. Scheduler концепция

    Class template 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;
      };
    }
    }
    

    Class template event_processor constructor and destructor

    event_processor( my_context ctx );
    

    Эффекты: Конструирует объект процессора событий и хранит копии ссылки, возвращенной myContext.my_tabler(), и объект, возвращенный myContext.my_handle()
    Note: Пользователи не могут создавать объекты event_processor<> подтипа непосредственно. Это можно сделать только через объект Scheduler класс

    virtual ~event_processor();
    

    Эффекты: Деструктурирует объект процессора событий
    Note: Пользователи не могут уничтожить event_процессор<> объекты подтипа непосредственно. Это можно сделать только через объект класса Scheduler

    Class template event_processor modifier functions

    void initiate();
    

    Эффекты: инициат_impl();
    Throws: Любые исключения, распространяемые из реализации инициат_impl()

    void process_event( const event_base & evt );
    

    Эффекты: процесс_event_impl(evt);
    Throws: Любые исключения, распространяемые из реализации процесс_event_impl()

    void terminate();
    

    Эффекты: terminate_impl();
    Throws: Любые исключения, распространяемые из реализации terminate_impl()

    Class template event_processor observer functions

    Scheduler & my_scheduler() const;
    

    Возвраты: Шетулер ссылка получена в конструкторе

    processor_handle my_handle() const;
    

    Возвращения: процессор_ручка объект, полученный в конструкторе

    Header <boost/statechart/fifo_scheduler.hpp>

    Class template fifo_scheduler

    Этот шаблон класса является моделью концепции Scheduler.

    Class template fifo_scheduler parameters

    Тамплита параметр Запросы Семантии Дефолт
    Фифомастер Модель концепции FifoWorker Фифомастер концепция fifo_worker<>
    Аллокат Модель стандартной концепции Allocator   std::allocator< void >

    Class template 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 );
      };
    }
    }
    

    Class template fifo_scheduler constructor

    fifo_scheduler( bool waitOnEmptyQueue = false );
    

    Effects: Строит объект fifo_tabler<>. В многослойных сборках waitOnEmptyQue направляется конструктору элемента данных типа FifoWorker. В однонаправленных сборках FifoWorker элемент данных по умолчанию структурирован по умолчанию
    Note: В однонаправленных сборках fifo_tabler<> конструктор не принимает никаких параметров и operator() таким образом всегда возвращается к звонителю, когда очередь события пуста

    Class template fifo_scheduler modifier functions

    template< 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: Любые исключения, распространяемые из вышеуказанного звонка

    Class template fifo_scheduler observer functions

    bool terminated() const;
    

    Requires: должен быть вызван только из нитки, которая также называет operator()()
    Returns: FifoWorker::terminated();

    Header <boost/statechart/exception_translator.hpp>

    Class template exception_translator

    Этот шаблон класса является моделью концепции ExceptionTranslator.

    Class template exception_translator parameters

    Тамплита параметр Запросы Семантии Дефолт
    Исключение Модель Event концепция Тип события, которое отправляется, когда исключение распространяется в рамки исключение_толщина

    Class template 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() );
            }
          }
      };
    }
    }
    

    Header <boost/statechart/
    null_exception_translator.hpp>

    Class null_exception_translator

    Этот класс является моделью концепции ExceptionTranslator.

    Class 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();
          }
      };
    }
    }
    

    Header <boost/statechart/simple_state.hpp>

    Enum history_mode

    Определяет тип истории государства.

    namespace boost
    {
    namespace statechart
    {
      enum history_mode
      {
        has_no_history,
        has_shallow_history,
        has_deep_history,
        has_full_history // shallow & deep
      };
    }
    }
    

    Class template 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;
    

    Государства, которые должны назвать любую из этих функций-членов от своих конструкторов, должны исходить из шаблона класса состояния.

    Class template 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

    Class template 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();
      };
    }
    }
    

    Class template simple_state constructor and destructor

    simple_state();
    

    Эффекты: Строит государственный объект

    ~simple_state();
    

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

    Class template simple_state modifier functions

    void 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<> мгновенные сообщения. Все прямые и косвенные звонки должны быть нейтральными для исключения
    Эффекты:

    1. Выходит из всех действующих в настоящее время прямых и косвенных внутренних состояний самого внутреннего общего контекста этого состояния иDestinationState. Внутренние состояния выходят первыми. Другие состояния выходят, как только все их прямые и косвенные внутренние состояния выходят. Внутренние состояния каждого состояния выходят по числу их ортогональной области. Государство в ортогональной области с наибольшим числом всегда выходит первым, затем государство в области со вторым по величине числом и так далее.
      Процесс выхода из состояния состоит из следующих этапов:
      1. Если есть исключение, которое еще не было успешно обработано, выполняется только шаг 5.
      2. Называетexitфункцию члена (см.синопсис) наиболее производного государственного объекта. Еслиexit()бросок, то шаги 3 и 4 не выполняются
      3. Если у государства неглубокая история, то сохраняется неглубокая информация об истории.
      4. Если государство — это внутреннее состояние, то информация о глубокой истории сохраняется для всех прямых и косвенных внешних состояний, имеющих глубокую историю.
      5. Государственный объект уничтожен
    2. Вводит (конструирует) состояние, которое является как непосредственным внутренним состоянием самого внутреннего общего контекста, так и самимDestinationStateили прямым или косвенным внешним состояниемDestinationState.
    3. Дерево, образованное прямыми и косвенными внутренними состояниями ранее введенного состояния, сначала входит вDestinationStateи выходит за пределы глубины. Внутренние состояния каждого состояния вводятся по числу их ортогональной области. Государство в ортогональной области 0 всегда вводится сначала, затем государство в области 1 и так далее.
    4. Инструктирует государственную машину отбрасывать текущее событие и продолжать обработку оставшихся событий (см.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<> мгновенные сообщения. Все прямые и косвенные звонки должны быть нейтральными для исключения
    Эффекты:

    1. Выходит из всех действующих в настоящее время прямых и косвенных внутренних состояний самого внутреннего общего контекста этого состояния иDestinationState. Внутренние состояния выходят первыми. Другие состояния выходят, как только все их прямые и косвенные внутренние состояния выходят. Внутренние состояния каждого состояния выходят по числу их ортогональной области. Государство в ортогональной области с наибольшим числом всегда выходит первым, затем государство в области со вторым по величине числом и так далее.
      Процесс выхода из состояния состоит из следующих этапов:
      1. Если есть исключение, которое еще не было успешно обработано, выполняется только шаг 5.
      2. Называетexitфункцию члена (см.синопсис) наиболее производного государственного объекта. Еслиexit()бросок, то шаги 3 и 4 не выполняются
      3. Если у государства неглубокая история, то сохраняется неглубокая информация об истории.
      4. Если государство — это внутреннее состояние, то информация о глубокой истории сохраняется для всех прямых и косвенных внешних состояний, имеющих глубокую историю.
      5. Государственный объект уничтожен
    2. Исполняет пройденное переходное действие, пересылая пройденное событие
    3. Вводит (конструирует) состояние, которое является как непосредственным внутренним состоянием самого внутреннего общего контекста, так и самимDestinationStateили прямым или косвенным внешним состояниемDestinationState.
    4. Дерево, образованное прямыми и косвенными внутренними состояниями ранее введенного состояния, сначала входит вDestinationStateи выходит за пределы глубины. Внутренние состояния каждого состояния вводятся по числу их ортогональной области. Государство в ортогональной области 0 всегда вводится сначала, затем государство в области 1 и так далее.
    5. Инструктирует государственную машину отбрасывать текущее событие и продолжать обработку оставшихся событий (см.state_machine<>::process_event())

    Возвращения: A результат объект. Пользовательская функция react должна вернуть этот объект своему звонителю
    Throws: Любые исключения, распространяемые из:

    • Allocator::rebind<>::other::allocate()(параметр шаблона переходит в базовый классoutermost_context_type)
    • государственные строители
    • exitФункции членов
    • Переходное действие

    Предостережение: Неизбежно уничтожает это состояние перед возвращением к функции react, которая, следовательно, не должна пытаться получить доступ к чему-либо, кроме стека объектов, прежде чем вернуться к своему звонителю

    result terminate();
    

    Requires: Должны быть вызваны только из react функций-членов, которые называются custom_reaction<> мгновенные сообщения. Все прямые и косвенные звонящие должны быть нейтральными для исключения
    Эффекты: Исключает это состояние и все его прямые и косвенные внутренние состояния. Самые внутренние штаты выходят первыми. Другие состояния выходят, как только все их прямые и косвенные внутренние состояния были исключены. Внутренние состояния каждого государства выходят в соответствии с количеством их ортогональной области. Государство в ортогональной области с наибольшим количеством всегда выходит первым, затем государство в регионе со вторым по величине числом и так далее.
    Процесс выхода из состояния состоит из следующих шагов:

    1. Если есть исключение, которое еще не было успешно обработано, выполняется только шаг 5.
    2. Называетexitфункцию члена (см.синопсис) наиболее производного государственного объекта. Еслиexit()бросает, то шаги 3 и 4 не выполняются.
    3. Если у государства неглубокая история, то сохраняется неглубокая информация об истории.
    4. Если государство — это внутреннее состояние, то информация о глубокой истории сохраняется для всех прямых и косвенных внешних состояний, имеющих глубокую историю.
    5. Государственный объект уничтожен

    Также поручает государственной машине отказаться от текущего события и продолжить обработку оставшихся событий (см. 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

    Class template simple_state observer functions

    outermost_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()

    Class template simple_state static functions

    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

    Header <boost/statechart/state.hpp>

    Class template 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, что спасает реализацию экспедиционного конструктора.

    Class template 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();
      };
    }
    }
    

    Прямой и косвенный подтипы состояния<> должны предоставить конструктору ту же подпись, что и состояние<> конструктор, пересылая контекстный параметр.

    Header <boost/statechart/shallow_history.hpp>

    Class template shallow_history

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

    Class template shallow_history parameters

    Тамплита параметр Запросы Семантии
    Государство Модель SimpleState или State понятий. Тип прошел как Контекст аргумент в пользу simple_state<> или state<> основание DefaultState должно пройти has_shallow_history или has_history как historyMode аргумент в свой simple_state<> Государство, которое введено, если неглубокая история недоступна

    Class template shallow_history synopsis

    namespace boost
    {
    namespace statechart
    {
      template< class DefaultState >
      class shallow_history
      {
        // implementation-defined
      };
    }
    }
    

    Header <boost/statechart/deep_history.hpp>

    Class template deep_history

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

    Class template deep_history parameters

    Тамплита параметр Запросы Семантии
    Государство Модель SimpleState или State понятий. Тип прошел как Контекст аргумент к simple_state<> или state<> основание DefaultState должно пройти has_deep_history или has_history как historyMode аргумент к его simple_state<> Государство, которое введено, если глубокая история недоступна

    Class template deep_history synopsis

    namespace boost
    {
    namespace statechart
    {
      template< class DefaultState >
      class deep_history
      {
        // implementation-defined
      };
    }
    }
    

    Header <boost/statechart/event_base.hpp>

    Class event_base

    Это общая основа всех событий.

    Class 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();
      };
    }
    }
    

    Class event_base constructor and destructor

    event_base( unspecified-parameter );
    

    Эффекты: Строит общую базовую часть мероприятия

    virtual ~event_base();
    

    Эффекты: Разлагает общую базовую часть события

    Class event_base observer functions

    intrusive_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

    Header <boost/statechart/event.hpp>

    Class template event

    Это шаблон базового класса всех событий.

    Class template event parameters

    Тамплита параметр Запросы Семантии Дефолт
    Последний Самый производный подтип этого шаблона класса    
    Аллокат Модель стандартной концепции Allocator Allocator::rebind< MostDerived >::other используется для распределения и размещения всех объектов подтипа события динамической продолжительности хранения, см. operator new std::allocator<пустошить >

    Class template 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();
      };
    }
    }
    

    Class template event constructor and destructor

    event();
    

    Эффекты: Построить событие

    virtual ~event();
    

    Эффекты: Деструктирует событие

    Class template event static functions

    static 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

    Header <boost/statechart/transition.hpp>

    Class template transition

    Этот шаблон класса используется для указания переходной реакции. Мгновения этого шаблона могут появиться в реакции участник typedef в моделях SimpleState и State понятий.

    Class template transition parameters

    Тамплита параметр Запросы Семантии Дефолт
    Отправить Модель концепции Event или класса event_base Это событие запускает переход. Если указана event_base, переход инициируется всеми моделями концепции Event  
    Дестинация Модель SimpleState или State понятий, любой из их типов общественной базы или мгновенная передача shallow_history или deep_history шаблонов класса. Исходное состояние (состояние, для которого этот переход определен) и Дестинация должно иметь общий прямой или косвенный контекст Государство назначения для перехода к  
    TransitionContext Общий контекст источника и Дестинация состояние Состояние, членом которого является переходное действие неуказанные
    pTransitionAction Указатель на функцию члена TransitionContext. Функция члена должна принимать const Event & параметр и возврат void Переходное действие, которое выполняется во время перехода. По умолчанию не выполняется переходное действие неуказанные

    Class template transition synopsis

    namespace boost
    {
    namespace statechart
    {
      template<
        class Event,
        class Destination,
        class TransitionContext = unspecified,
        void ( TransitionContext::*pTransitionAction )(
          const Event & ) = unspecified >
      class transition
      {
        // implementation-defined
      };
    }
    }
    

    Class template transition semantics

    При исполнении одного из следующих призывов к членской функции государства, для которого была определена реакция, делается:

    Header <boost/statechart/in_state_reaction.hpp>

    Class template in_state_reaction

    Этот шаблон класса используется для указания внутренней реакции. Мгновения этого шаблона могут появиться в реакции участник typedef в моделях SimpleState и State понятий.

    Class template in_state_reaction parameters

    Тамплита параметр Запросы Семантии Дефолт
    Отправить Модель концепции Event или класса event_base Это событие вызывает реакцию в состоянии. Если указана event_base, реакция в состоянии вызывается всеми моделями концепции Event  
    Контекст реакции Либо государство, определяющее само состояние реакции, один из его прямых или косвенных контекстов или любой из их общественных типов Состояние, в котором действие является членом неуказанные
    pAction Указание на функцию члена ReactionContext. Функция члена должна принимать const Event & параметр и возврат void Действие, которое выполняется во время реакции государства неуказанные

    Class template 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
      };
    }
    }
    

    Class template in_state_reaction semantics

    При исполнении происходит следующее:

    1. Если действие было определено,pActionназывается, передавая событие запуска в качестве единственного аргумента.
    2. Призывается кdiscard_event членской функции государства, для которого была определена реакция

    Header <boost/statechart/termination.hpp>

    Class template termination

    Этот шаблон класса используется для указания реакции прекращения. Мгновения этого шаблона могут появиться в реакции участник typedef в моделях SimpleState и State понятий.

    Class template termination parameters

    Тамплита параметр Запросы Семантии
    Отправить Модель концепции Event или класса event_base Событие, вызвавшее прекращение. Если указана event_base, прекращение запускается всеми моделями концепции Event

    Class template termination synopsis

    namespace boost
    {
    namespace statechart
    {
      template< class Event >
      class termination
      {
        // implementation-defined
      };
    }
    }
    

    Class template termination semantics

    При исполнении вызывается функция terminate члена государства, для которого была определена реакция.

    Header <boost/statechart/deferral.hpp>

    Class template deferral

    Этот шаблон класса используется для указания отсроченной реакции. Мгновения этого шаблона могут появиться в реакции участник typedef в моделях SimpleState и State понятий.

    Class template deferral parameters

    Тамплита параметр Запросы Семантии
    Отправить Модель концепции Event или класса event_base Это событие вызывает отсрочку. Если указана event_base, отсрочка запускается всеми моделями концепции Event

    Class template deferral synopsis

    namespace boost
    {
    namespace statechart
    {
      template< class Event >
      class deferral
      {
        // implementation-defined
      };
    }
    }
    

    Class template deferral semantics

    При исполнении звонят defer_event функции члена государства, для которого была определена реакция.

    Header <boost/statechart/custom_reaction.hpp>

    Class template custom_reaction

    Этот шаблон класса используется для указания пользовательской реакции. Мгновения этого шаблона могут появиться в реакции участник typedef в моделях SimpleState и State понятий.

    Class template custom_reaction parameters

    Тамплита параметр Запросы Семантии
    Отправить Модель концепции Event или класса event_base Это событие вызывает настраиваемую реакцию. Если указана event_base, настраиваемая реакция вызывается всеми моделями концепции Event

    Class template custom_reaction synopsis

    namespace boost
    {
    namespace statechart
    {
      template< class Event >
      class custom_reaction
      {
        // implementation-defined
      };
    }
    }
    

    Class template 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();
    

    Header <boost/statechart/result.hpp>

    Class 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 );
      };
    }
    }
    

    Class result constructor and destructor

    result( const result & other );
    

    Запросы: другая не потребляется
    Следы: Копировать-конструирует новый результат объект и отметины другая по потреблению. То есть, результат имеет деструктивную копировальную семантику

    ~result();
    

    Запросы: это помечено как потребленное
    Эффекты: Деструктирует объект результата


    Valid HTML 4.01 Transitional

    Пересмотрен 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.




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



    :: Главная :: ::


    реклама


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

    Время компиляции файла: 2024-08-30 11:47:00
    2025-05-20 01:26:18/0.023165941238403/0