Пространства имен | |
namespace | so_4 |
namespace | so_4::rt |
Макросы | |
#define | _SO_4_RT__SOL_HPP_ |
#define | __SOL4_CLASS_NAMESPACE_NAME(line) |
#define | __SOL4_CLASS_START(full_cpp_name, line) |
#define | SOL4_CLASS_START(full_cpp_name) |
Начало описания класса агента. | |
#define | SOL4_CLASS_FINISH() |
Завершение описания класса агента. | |
#define | __SOL4_SUPER_CLASS_BINDER_NAME(line) |
#define | __SOL4_SUPER_CLASS(name, line) |
#define | SOL4_SUPER_CLASS(name) |
Указание имени базового класса. | |
#define | SOL4_MSG_START(sol_name, full_cpp_name) |
Начало описания сообщения. | |
#define | SOL4_MSG_FINISH() |
Завершение описания сообщения. | |
#define | SOL4_MSG_FIELD(field_name) |
Описание поля, являющегося одиночным объектом. | |
#define | SOL4_MSG_FIELD_ARRAY(field_name) |
Описание поля, являющегося вектором. | |
#define | SOL4_MSG_CHECKER(full_cpp_method_name) |
Описание функции проверки экземпляра сообщения. | |
#define | SOL4_EVENT(event_name) |
Описание события. | |
#define | SOL4_EVENT_WITH_INCIDENT_TYPE(event_name, msg_type) |
Описание события с автоматическим контролем типа инцидента. | |
#define | SOL4_EVENT_STC(event_name, msg_type) |
Описание события с контролем типа инцидента при подписке. | |
#define | SOL4_EVENT_WITH_FACTORY(event_name, factory) |
Описание события со специфическим внутренним представлением. | |
#define | SOL4_STATE_START(state_name) |
Начало описания состояния. | |
#define | SOL4_STATE_EVENT(event_name) |
Событие, разрешенное к обработке в состоянии. | |
#define | SOL4_STATE_ON_ENTER(method) |
Описание обработчика входа в состояние. | |
#define | SOL4_STATE_ON_EXIT(method) |
Описание обработчика выхода из состояния. | |
#define | SOL4_STATE_FINISH() |
Завершение описания состояния. | |
#define | __SOL4_STATE_MERGE_VARIABLE(line) |
#define | __SOL4_STATE_MERGE(class_name, state_name, line) |
#define | SOL4_STATE_MERGE(class_name, state_name) |
Указание того, что содержимое состояние должно быть слито с содержимым указанного состояния. | |
#define | __SOL4_STATE_EXCLUDE_EVENT_VARIABLE(line) |
#define | __SOL4_STATE_EXCLUDE_EVENT(event_name, line) |
#define | SOL4_STATE_EXCLUDE_EVENT(event_name) |
Изъятия из списка разрешенных событий указанного события. | |
#define | SOL4_CHANGE_STATE_NOTIFY() |
Указание рассылать сообщение so_msg_state при смене состояния агента. | |
#define | SOL4_INITIAL_STATE(name) |
Указание имени начального состояния агента. | |
#define | SOL4_SUBSCR_EVENT_START(event_name, priority) |
Начало подписки события. | |
#define | SOL4_SUBSCR_EVENT_MSG_SELF(message) |
Подписать событие на собственное сообщение агента. | |
#define | SOL4_SUBSCR_EVENT_MSG(agent, message) |
Подписать событие на сообщение агента. | |
#define | SOL4_SUBSCR_EVENT_FINISH() |
Завершение подписки события. | |
#define | SOL4_SUBSCR_EVENT_FINISH_CERR() |
Завершение подписки события с печатью ошибок в cerr. | |
Функции | |
Функции для вызова метода-события в зависимости от его формата. | |
template<class A, class A2> | |
void | so_4::rt::call_event (A *a, void(A2::*evt)(), const event_data_t &e) |
template<class A, class A2> | |
void | so_4::rt::call_event (A *a, void(A2::*evt)(const event_data_t &), const event_data_t &e) |
template<class A, class A2, class M> | |
void | so_4::rt::call_event (A *a, void(A2::*evt)(const event_data_t &, const M *), const event_data_t &e, const M *m) |
template<class A, class A2, class M> | |
void | so_4::rt::call_event (A *a, void(A2::*evt)(const event_data_t &, const M &), const event_data_t &e, const M *m) |
template<class A, class A2, class M> | |
void | so_4::rt::call_event (A *a, void(A2::*evt)(const M *), const event_data_t &e, const M *m) |
template<class A, class A2, class M> | |
void | so_4::rt::call_event (A *a, void(A2::*evt)(const M &), const event_data_t &e, const M *m) |
#define SOL4_CHANGE_STATE_NOTIFY | ( | ) |
Указание рассылать сообщение so_msg_state при смене состояния агента.
Делает агента владельцем сообщения с именем "so_msg_state", реализуемого типом so_4::rt::so_msg_state.
SOL4_STATE_START( st_1 ) SOL4_STATE_FINISH() SOL4_STATE_START( st_2 ) SOL4_STATE_FINISH() SOL4_CHANGE_STATE_NOTIFY() SOL4_STATE_START( st_3 ) SOL4_STATE_FINISH()
#define SOL4_CLASS_FINISH | ( | ) |
Завершение описания класса агента.
Этот макрос завершает описание класса агента, начатое макросом SOL4_CLASS_START().
#define SOL4_CLASS_START | ( | full_cpp_name | ) |
Начало описания класса агента.
Описание класса агента завершается макросом SOL4_CLASS_FINISH().
В описании класса агента могут перечисляться сообщения агентов данного класса (SOL4_MSG_START(), SOL4_MSG_FINISH()); события (SOL4_EVENT()), состояния (SOL4_STATE_START(), SOL4_STATE_FINISH()). Так же может использоваться макрос SOL4_CHANGE_STATE_NOTIFY().
full_cpp_name | имя С++ класса который реализует агентов данного класса. С одной стороны -- это должно быть корректное C++ имя (с учетом пространств имен, областей видимости и т.д.). С другой стороны -- это имя будет именем класса агентов в словаре SObjectizer-а и, поэтому, должно быть уникальным именем. |
#define SOL4_EVENT | ( | event_name | ) |
Описание события.
Этот макрос может использоваться для описания обработчиков событий, которые не получают указатель (ссылку) на экземпляр инцидента в виде отдельного параметра. Т.е. для обработчиков формата:
void A::evt(); void A::evt( const event_data_t & );
event_name | имя события, которое существует у агентов данного типа. В C++ классе, реализующем агента, должен быть доступный (public), не статический метод с именем event_name. |
#define SOL4_EVENT_STC | ( | event_name, | |||
msg_type | ) |
Описание события с контролем типа инцидента при подписке.
void A::evt_handler( const so_4::rt::event_data_t &, const M * cmd ); void A::evt_handler( const so_4::rt::event_data_t &, const M & cmd ); void A::evt_handler( const M * cmd ); void A::evt_handler( const M & cmd );
При подписке данного события будет проверена совместимость реального типа инцидента и разрешенного типа инцидента. Если реальный тип инцидента окажется не совместимым, то подписка события окажется неудачной.
Отличие этого макроса от макроса SOL4_EVENT_WITH_INCIDENT_TYPE() состоит в том, что описываемые с помощью этого макроса обработчики константный указатель (ссылка) на инцидент.
event_name | имя события, которое существует у агентов данного типа. В C++ классе, реализующем агента, должен быть доступный (public), не статический метод с именем event_name. | |
msg_type | имя C++ класса, реализующего инцидента данного события. |
#define SOL4_EVENT_WITH_FACTORY | ( | event_name, | |||
factory | ) |
Описание события со специфическим внутренним представлением.
Для каждого события внутри SObjectizer-а создается внутренне представление, определяющее логику обработки сообытия. В большинстве случаев используется "общая" логика обработки события. Но в некоторых случаях (например, для поддержки SOP) необходимо применять "специфическую" логику. Для этих случаев предназначен макрос SOL4_EVENT_WITH_FACTORY.
event_name | имя события, которое существует у агентов данного типа. В C++ классе, реализующем агента, должен быть доступный (public), не статический метод с именем event_name. | |
factory | создатель объекта, отвечающего за специфическое внутреннее представление события. |
#define SOL4_EVENT_WITH_INCIDENT_TYPE | ( | event_name, | |||
msg_type | ) |
Описание события с автоматическим контролем типа инцидента.
Предназначен для описания обработчиков событий, имеющих один из следующих форматов:
void A::evt_handler( const so_4::rt::event_data_t &, const msg_type * cmd ); void A::evt_handler( const so_4::rt::event_data_t &, msg_type * cmd );
При подписке данного события будет проверена совместимость реального типа инцидента и разрешенного типа инцидента. Если реальный тип инцидента окажется не совместимым, то подписка события окажется неудачной.
void A::evt_handler( const so_4::rt::event_data_t &, msg_type * cmd );
event_name | имя события, которое существует у агентов данного типа. В C++ классе, реализующем агента, должен быть доступный (public), не статический метод с именем event_name. | |
msg_type | имя C++ класса, реализующего инцидента данного события. |
#define SOL4_INITIAL_STATE | ( | name | ) |
Указание имени начального состояния агента.
Если класс ничего не наследует, то начальным состоянием агентов этого класса будет первое из описанных в классе состояний. При наличии наследования, особенно множественного, необходимо явно указывать, какое состояние является начальным для агентов данного класса. Макрос SOL4_INITIAL_STATE() предназначен для того, чтобы указать имя начального состояния.
В описании класса должно быть указано только одно стартовое состояние.
Имя указываемого в SOL4_INITIAL_STATE() состояния может быть именем унаследованого состояния.
SOL4_CLASS_START( connect::a_tcp_connect_t ) SOL4_SUPER_CLASS( connect::a_base_connect_t ) SOL4_INITIAL_STATE( st_not_connected ) SOL4_CLASS_FINISH()
name | - простой С++ идентификатор, имя стартового состояния. |
#define SOL4_MSG_CHECKER | ( | full_cpp_method_name | ) |
Описание функции проверки экземпляра сообщения.
Указанная функция будет использоваться для проверки корректности экземпляра сообщения.
full_cpp_method_name | полное имя C++ функции или статического метода. Имя должно быть корректным именем с учетом пространств имен и области видимости. |
#define SOL4_MSG_FIELD | ( | field_name | ) |
Описание поля, являющегося одиночным объектом.
Описывает поле-одиночный объект для SOP. Поле должно иметь один из типов: char, unsigned char, signed char, short, unsigned short, int, unsigned int, float, double, std::string, so_4::rt::comm_buf_t.
Для описанного подобным образом поля можно установить значение при отправке сообщения средствами SOP.
field_name | имя поля сообщения. |
#define SOL4_MSG_FIELD_ARRAY | ( | field_name | ) |
Описание поля, являющегося вектором.
Описывает поле-вектор для SOP. Поле должно иметь один из типов: char, unsigned char, signed char, short, unsigned short, int, unsigned int, float, double.
Для описанного подобным образом поля можно установить значение при отправке сообщения средствами SOP.
field_name | имя поля сообщения. |
#define SOL4_MSG_FINISH | ( | ) |
Завершение описания сообщения.
Этот макрос завершает описание сообщения, начатое макросом SOL4_MSG_START().
#define SOL4_MSG_START | ( | sol_name, | |||
full_cpp_name | ) |
Начало описания сообщения.
Описание сообщения завершается макросом SOL4_MSG_FINISH().
Описание сообщения может содержать описания полей (SOL4_MSG_FIELD(), SOL4_MSG_FIELD_ARRAY()) и функции проверки корректности экземпляра сообщения (SOL4_MSG_CHECKER()).
sol_name | имя сообщения в SObjectizer-е. Должно быть корректным, простым C++ идентификатором. | |
full_cpp_name | имя C++ типа (класса или структуры), объекты которого будут являться экземплярами данного сообщения. SObjectizer предполагает, что экземпляр сообщения относится к данному типу или производному от данного типа типу. full_cpp_name должно быть корректным C++ именем (с учетом пространств имен и области видимости). |
#define SOL4_STATE_EVENT | ( | event_name | ) |
Событие, разрешенное к обработке в состоянии.
Должен использоваться только внутри макросов SOL4_STATE_START(), SOL4_STATE_FINISH().
event_name | имя события. |
#define SOL4_STATE_EXCLUDE_EVENT | ( | event_name | ) |
Изъятия из списка разрешенных событий указанного события.
#define SOL4_STATE_FINISH | ( | ) |
Завершение описания состояния.
Описание состояния должно быть начато макросом SOL4_STATE_START().
#define SOL4_STATE_MERGE | ( | class_name, | |||
state_name | ) |
Указание того, что содержимое состояние должно быть слито с содержимым указанного состояния.
#define SOL4_STATE_ON_ENTER | ( | method | ) |
Описание обработчика входа в состояние.
Может быть указано несколько обработчиков входа в состояние. Порядок, в котором обработчики будут вызываться при входе в состоянии не определен.
method | имя доступного (public), не статического метода C++ класса, реализующего агента. Этот метод будет вызываться при входе в состояние. |
#define SOL4_STATE_ON_EXIT | ( | method | ) |
Описание обработчика выхода из состояния.
Может быть указано несколько обработчиков выхода из состояния. Порядок, в котором обработчики будут вызываться при выходе из состояния не определен.
method | имя доступного (public), не статического метода C++ класса, реализующего агента. Этот метод будет вызываться при выходе из состояния. |
#define SOL4_STATE_START | ( | state_name | ) |
Начало описания состояния.
Описание состояния завершается макросом SOL4_STATE_FINISH().
Описание состояния может содержать описания событий, разрешенных к обработке в данном состоянии (SOL4_STATE_EVENT()), и функций обработки входа и выхода в состояние. (SOL4_STATE_ON_ENTER(), SOL4_STATE_ON_EXIT()).
state_name | имя состояния агента в SObjectizer-е. Должно быть корректным, простым C++ идентификатором. |
#define SOL4_SUBSCR_EVENT_FINISH | ( | ) |
Завершение подписки события.
Подписка события должна быть начата макросом SOL4_SUBSCR_EVENT_START.
В своей реализации обращается к so_4::api::subscribe_event(). Код возврата subscribe_event игнорируется. Поэтому нет возможности определить, успешно ли выполнена подписка.
Параметр subscr_flag функции subscribe_event устанавливается равным so_4::rt::evt_subscr_t::e_change_all.
#define SOL4_SUBSCR_EVENT_FINISH_CERR | ( | ) |
Завершение подписки события с печатью ошибок в cerr.
Подписка события должна быть начата макросом SOL4_SUBSCR_EVENT_START.
В своей реализации обращается к so_4::api::subscribe_event(). Если код возврата subscribe_event отличен от 0, то код возврата отображается в cerr.
Параметр subscr_flag функции subscribe_event устанавливается равным so_4::rt::evt_subscr_t::e_change_all.
Используется в so_4::rt::comm::a_channel_processor_base_t::so_on_subscription().
#define SOL4_SUBSCR_EVENT_MSG | ( | agent, | |||
message | ) |
Подписать событие на сообщение агента.
agent | строковое имя агента-владельца сообщения или выражение, возвращающее строку (например, "a_main" или sobjectizer_agent_name()). | |
message | строковое имя сообщения (например, "msg_start"). |
Используется в so_4::rt::comm::a_channel_processor_base_t::so_on_subscription().
#define SOL4_SUBSCR_EVENT_MSG_SELF | ( | message | ) |
Подписать событие на собственное сообщение агента.
message | строковое имя сообщения (например, "msg_start"). |
Используется в so_4::rt::comm::a_channel_processor_base_t::so_on_subscription().
#define SOL4_SUBSCR_EVENT_START | ( | event_name, | |||
priority | ) |
Начало подписки события.
Между макросами SOL4_SUBSCR_EVENT_START и SOL4_SUBSCR_EVENT_FINISH* могут использоваться макросы SOL4_SUBSCR_EVENT_MSG() и/или SOL4_SUBSCR_EVENT_MSG_SELF().
event_name | имя подписываемого события. Это имя, которое было использовано в макросе SOL4_EVENT(). | |
priority | приоритет события. Целое число. Ограничения на приоритет устанавливаются конкретным диспетчером. |
Используется в so_4::rt::comm::a_channel_processor_base_t::so_on_subscription().
#define SOL4_SUPER_CLASS | ( | name | ) |
Указание имени базового класса.
При указании имени базового класса не обязательно, чтобы указываемое C++ имя было известно в текущей области видимости.
SOL4_CLASS_START( connect::a_tcp_connect_t ) SOL4_SUPER_CLASS( connect::a_base_connect_t ) SOL4_CLASS_FINISH() SOL4_CLASS_START( trx::a_abstract_trx_t ) ... SOL4_CLASS_FINISH() SOL4_CLASS_START( trx::a_change_amount_trx_t ) SOL4_SUPER_CLASS( trx::a_abstract_trx_t ) SOL4_CLASS_FINISH()
name | - С++ идентификатор базового класса (возможно составной идентификатор). |
Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:47 2008. Создано системой 1.5.6 |