Класс transformer

Блок обмена сообщениями transformer — это упорядоченный блок propagator_block с одной целью и несколькими источниками, который может принимать сообщения одного типа и хранить неограниченное число сообщений другого типа.

Синтаксис

template<class _Input, class _Output>
class transformer : public propagator_block<single_link_registry<ITarget<_Output>>,
    multi_link_registry<ISource<_Input>>>;

Параметры

_Вход
Тип полезных данных сообщений, принятых буфером.

_Выход
Тип полезных данных сообщений, хранящихся и распространяемых буфером.

Участники

Открытые конструкторы

Имя Описание
Трансформатор Перегружен. Создает блок обмена сообщениями transformer .
Деструктор ~преобразователя Уничтожает transformer блок обмена сообщениями.

Защищенные методы

Имя Описание
accept_message Принимает сообщение, которое было предложено этим transformer блоком обмена сообщениями, передавая владельца вызывающему объекту.
consume_message Использует сообщение, которое ранее предлагалось transformer целевым объектом и зарезервировано, передавая владельца вызывающему объекту.
link_target_notification Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим transformer блоком обмена сообщениями.
propagate_message Асинхронно передает сообщение из ISource блока в этот transformer блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока.
propagate_to_any_targets Выполняет функцию преобразователя для входящих сообщений.
release_message Освобождает предыдущее резервирование сообщений. (Переопределяет source_block::release_message.)
reserve_message Резервирует сообщение, ранее предлагаемое этим transformer блоком обмена сообщениями. (Переопределяет source_block::reserve_message.)
resume_propagation Возобновляет распространение после освобождения резервирования. (Переопределяет source_block::resume_propagation.)
send_message Синхронно передает сообщение из ISource блока в этот transformer блок обмена сообщениями. Вызывается методом send при вызове исходного блока.
supports_anonymous_source Переопределяет метод supports_anonymous_source, чтобы указать, что данный блок может принимать сообщения, предоставляемые ему несвязанным источником. (Переопределения ITarget::supports_anonymous_source.)

Замечания

Дополнительные сведения см. в разделе "Блоки асинхронных сообщений".

Иерархия наследования

ISource

ITarget

source_block

propagator_block

transformer

Требования

Заголовок: agents.h

Пространство имен: concurrency

accept_message

Принимает сообщение, которое было предложено этим transformer блоком обмена сообщениями, передавая владельца вызывающему объекту.

virtual message<_Output>* accept_message(runtime_object_identity _MsgId);

Параметры

_MsgId
Предлагаемый runtime_object_identitymessage объект.

Возвращаемое значение

Указатель на объект, на который вызывающий message объект теперь имеет право владения.

consume_message

Использует сообщение, которое ранее предлагалось transformer целевым объектом и зарезервировано, передавая владельца вызывающему объекту.

virtual message<_Output>* consume_message(runtime_object_identity _MsgId);

Параметры

_MsgId
Используемый runtime_object_identitymessage объект.

Возвращаемое значение

Указатель на объект, на который вызывающий message объект теперь имеет право владения.

Замечания

acceptАналогично, но всегда предшествует вызовуreserve.

Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим transformer блоком обмена сообщениями.

virtual void link_target_notification(_Inout_ ITarget<_Output> *);

propagate_message

Асинхронно передает сообщение из ISource блока в этот transformer блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока.

virtual message_status propagate_message(
    _Inout_ message<_Input>* _PMessage,
    _Inout_ ISource<_Input>* _PSource);

Параметры

_PMessage
Указатель на объект message.

_PSource
Указатель на исходный блок, предлагающий сообщение.

Возвращаемое значение

Message_status указание того, что целевой объект решил сделать с сообщением.

propagate_to_any_targets

Выполняет функцию преобразователя для входящих сообщений.

virtual void propagate_to_any_targets(_Inout_opt_ message<_Output> *);

release_message

Освобождает предыдущее резервирование сообщений.

virtual void release_message(runtime_object_identity _MsgId);

Параметры

_MsgId
Объект runtime_object_identity , message который освобождается.

reserve_message

Резервирует сообщение, ранее предлагаемое этим transformer блоком обмена сообщениями.

virtual bool reserve_message(runtime_object_identity _MsgId);

Параметры

_MsgId
Зарезервированный runtime_object_identitymessage объект.

Возвращаемое значение

true Значение , если сообщение успешно зарезервировано, false в противном случае.

Замечания

После reserve вызова, если он возвращается true, consumerelease либо должен вызываться для принятия или освобождения владения сообщением.

resume_propagation

Возобновляет распространение после освобождения резервирования.

virtual void resume_propagation();

send_message

Синхронно передает сообщение из ISource блока в этот transformer блок обмена сообщениями. Вызывается методом send при вызове исходного блока.

virtual message_status send_message(
    _Inout_ message<_Input>* _PMessage,
    _Inout_ ISource<_Input>* _PSource);

Параметры

_PMessage
Указатель на объект message.

_PSource
Указатель на исходный блок, предлагающий сообщение.

Возвращаемое значение

Message_status указание того, что целевой объект решил сделать с сообщением.

supports_anonymous_source

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

virtual bool supports_anonymous_source();

Возвращаемое значение

true так как блок не откладывает предлагаемые сообщения.

Трансформатор

Создает блок обмена сообщениями transformer .

transformer(
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget = NULL);

transformer(
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget,
    filter_method const& _Filter);

transformer(
    Scheduler& _PScheduler,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget = NULL);

transformer(
    Scheduler& _PScheduler,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget,
    filter_method const& _Filter);

transformer(
    ScheduleGroup& _PScheduleGroup,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget = NULL);

transformer(
    ScheduleGroup& _PScheduleGroup,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget,
    filter_method const& _Filter);

Параметры

_Func
Функция, которая будет вызвана для каждого принятого сообщения.

_PTarget
Указатель на целевой блок для связи с преобразователем.

_Фильтр
Функция фильтра, которая определяет, следует ли принимать предлагаемые сообщения.

_PScheduler
Объект Scheduler , в котором запланирована задача распространения для блока обмена сообщениями transformer .

_PScheduleGroup
Объект ScheduleGroup , в котором запланирована задача распространения для блока обмена сообщениями transformer . Используемый объект Scheduler подразумевается группой расписаний.

Замечания

Среда выполнения использует планировщик по умолчанию, если вы не указали параметры _PScheduler или _PScheduleGroup .

Тип _Transform_method — это functor с подписью _Output (_Input const &) , которая вызывается этим transformer блоком обмена сообщениями для обработки сообщения.

Тип filter_method — это functor с подписью bool (_Input const &) , которая вызывается этим transformer блоком обмена сообщениями, чтобы определить, следует ли принимать предлагаемое сообщение.

~Трансформатор

Уничтожает transformer блок обмена сообщениями.

~transformer();

См. также

Пространство имен concurrency
Класс call