Classe transformer
Um bloco de mensagens transformer
é um propagator_block
de destino único, de várias fontes e ordenado que pode aceitar mensagens de um tipo, sendo capaz de armazenar um número não associado de mensagens de um tipo diferente.
Sintaxe
template<class _Input, class _Output>
class transformer : public propagator_block<single_link_registry<ITarget<_Output>>,
multi_link_registry<ISource<_Input>>>;
Parâmetros
_Input
O tipo de conteúdo das mensagens aceitas pelo buffer.
_Output
O tipo de conteúdo das mensagens armazenadas e propagadas pelo buffer.
Membros
Construtores públicos
Nome | Descrição |
---|---|
transformador | Sobrecarregado. Constrói um bloco de mensagens transformer . |
Destruidor ~transformer | Destrói o bloco de mensagens transformer . |
Métodos protegidos
Nome | Descrição |
---|---|
accept_message | Aceita uma mensagem que foi oferecida por esse bloco de mensagens transformer , transferindo a propriedade para o chamador. |
consume_message | Consome uma mensagem oferecida anteriormente pelo transformer e reservada pelo destino, transferindo a propriedade para o chamador. |
link_target_notification | Um retorno de chamada que notifica que um novo destino foi vinculado a esse bloco de mensagens transformer . |
propagate_message | Passa uma mensagem de modo assíncrono de um bloco ISource para este bloco de mensagens transformer . Ele é invocado pelo método propagate , quando chamado por um bloco de origem. |
propagate_to_any_targets | Executa a função transformador nas mensagens de entrada. |
release_message | Libera uma reserva de mensagem anterior. (Substitui source_block::release_message.) |
reserve_message | Reserva uma mensagem oferecida anteriormente por este bloco de mensagens transformer . (Substitui source_block::reserve_message.) |
resume_propagation | Retoma a propagação depois que uma reserva é liberada. (Substitui source_block::resume_propagation.) |
send_message | De maneira síncrona, passa uma mensagem de um bloco ISource para este bloco de mensagens transformer . Ele é invocado pelo método send , quando chamado por um bloco de origem. |
supports_anonymous_source | Substitui o método supports_anonymous_source para indicar que esse bloco pode aceitar mensagens oferecidas a ele por uma fonte que não está vinculada. (Substitui ITarget::supports_anonymous_source.) |
Comentários
Para mais informações, confira Blocos de mensagens assíncronas.
Hierarquia de herança
transformer
Requisitos
Cabeçalho: agents.h
Namespace: concurrency
accept_message
Aceita uma mensagem que foi oferecida por esse bloco de mensagens transformer
, transferindo a propriedade para o chamador.
virtual message<_Output>* accept_message(runtime_object_identity _MsgId);
Parâmetros
_MsgId
O runtime_object_identity
do objeto message
oferecido.
Valor de retorno
Um ponteiro para o objeto message
do qual o chamador agora tem propriedade.
consume_message
Consome uma mensagem oferecida anteriormente pelo transformer
e reservada pelo destino, transferindo a propriedade para o chamador.
virtual message<_Output>* consume_message(runtime_object_identity _MsgId);
Parâmetros
_MsgId
O runtime_object_identity
do objeto message
que está sendo consumido.
Valor de retorno
Um ponteiro para o objeto message
do qual o chamador agora tem propriedade.
Comentários
Semelhante a accept
, mas é sempre precedido por uma chamada para reserve
.
link_target_notification
Um retorno de chamada que notifica que um novo destino foi vinculado a esse bloco de mensagens transformer
.
virtual void link_target_notification(_Inout_ ITarget<_Output> *);
propagate_message
Passa uma mensagem de modo assíncrono de um bloco ISource
para este bloco de mensagens transformer
. Ele é invocado pelo método propagate
, quando chamado por um bloco de origem.
virtual message_status propagate_message(
_Inout_ message<_Input>* _PMessage,
_Inout_ ISource<_Input>* _PSource);
Parâmetros
_PMessage
Um ponteiro para o message
objeto.
_PSource
Um ponteiro para o bloco de origem que oferece a mensagem.
Valor de retorno
Uma indicação de message_status do que o destino decidiu fazer com a mensagem.
propagate_to_any_targets
Executa a função transformador nas mensagens de entrada.
virtual void propagate_to_any_targets(_Inout_opt_ message<_Output> *);
release_message
Libera uma reserva de mensagem anterior.
virtual void release_message(runtime_object_identity _MsgId);
Parâmetros
_MsgId
O runtime_object_identity
do objeto message
que está sendo liberado.
reserve_message
Reserva uma mensagem oferecida anteriormente por este bloco de mensagens transformer
.
virtual bool reserve_message(runtime_object_identity _MsgId);
Parâmetros
_MsgId
O runtime_object_identity
do objeto message
que está sendo reservado.
Valor de retorno
true
se a mensagem foi reservada com êxito; caso contrário, false
.
Comentários
Depois de reserve
ser chamado, se ele retornar true
, consume
ou release
deverá ser chamado para assumir ou liberar a propriedade da mensagem.
resume_propagation
Retoma a propagação depois que uma reserva é liberada.
virtual void resume_propagation();
send_message
De maneira síncrona, passa uma mensagem de um bloco ISource
para este bloco de mensagens transformer
. Ele é invocado pelo método send
, quando chamado por um bloco de origem.
virtual message_status send_message(
_Inout_ message<_Input>* _PMessage,
_Inout_ ISource<_Input>* _PSource);
Parâmetros
_PMessage
Um ponteiro para o message
objeto.
_PSource
Um ponteiro para o bloco de origem que oferece a mensagem.
Valor de retorno
Uma indicação de message_status do que o destino decidiu fazer com a mensagem.
supports_anonymous_source
Substitui o método supports_anonymous_source
para indicar que esse bloco pode aceitar mensagens oferecidas a ele por uma fonte que não está vinculada.
virtual bool supports_anonymous_source();
Valor de retorno
true
porque o bloco não adia as mensagens oferecidas.
transformador
Constrói um bloco de mensagens 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);
Parâmetros
_Func
Uma função que será invocada para cada mensagem aceita.
_PTarget
Um ponteiro para um bloco de destino para vincular ao transformador.
_Filter
Uma função de filtro que determina se as mensagens oferecidas devem ser aceitas.
_PScheduler
O objeto Scheduler
no qual a tarefa de propagação do bloco de mensagens transformer
está agendada.
_PScheduleGroup
O objeto ScheduleGroup
no qual a tarefa de propagação do bloco de mensagens transformer
está agendada. O objeto Scheduler
usado é implícito pelo grupo agendado.
Comentários
O runtime usará o agendador padrão se você não especificar os parâmetros _PScheduler
ou _PScheduleGroup
.
O tipo _Transform_method
é um functor com assinatura _Output (_Input const &)
invocado por esse bloco de mensagens transformer
para processar uma mensagem.
O tipo filter_method
é um functor com assinatura bool (_Input const &)
invocado por esse bloco de mensagens transformer
para determinar se ele deve ou não aceitar uma mensagem oferecida.
~transformador
Destrói o bloco de mensagens transformer
.
~transformer();