Dela via


transformeringsklass

Ett transformer meddelandeblock är ett enmålsblock med flera källor som propagator_block kan acceptera meddelanden av en typ och som kan lagra ett obundet antal meddelanden av en annan typ.

Syntax

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

Parameterar

_Input
Nyttolasttypen för de meddelanden som accepteras av bufferten.

_Output
Nyttolasttypen för de meddelanden som lagras och sprids ut av bufferten.

Medlemmar

Offentliga konstruktorer

Namn Beskrivning
transformer Överbelastad. Skapar ett transformer meddelandeblock.
~transformer Förstör meddelandeblocket transformer .

Skyddade metoder

Namn Beskrivning
accept_message Accepterar ett meddelande som erbjöds av det här transformer meddelandeblocket och överför ägarskapet till anroparen.
consume_message Förbrukar ett meddelande som tidigare erbjöds av transformer och reserverades av målet och överför ägarskapet till anroparen.
link_target_notification Ett återanrop som meddelar att ett nytt mål har länkats till det här transformer meddelandeblocket.
propagate_message Asynkront skickar ett meddelande från ett ISource block till det här transformer meddelandeblocket. Den anropas av metoden när den propagate anropas av ett källblock.
propagate_to_any_targets Kör transformeringsfunktionen på indatameddelandena.
release_message Släpper en tidigare meddelandereservation. (Åsidosätter source_block::release_message.)
reserve_message Reserverar ett meddelande som tidigare erbjöds av det här transformer meddelandeblocket. (Åsidosätter source_block::reserve_message.)
resume_propagation Återupptar spridning efter att en reservation har släppts. (Åsidosätter source_block::resume_propagation.)
send_message Skickar synkront ett meddelande från ett ISource block till det här transformer meddelandeblocket. Den anropas av metoden när den send anropas av ett källblock.
supports_anonymous_source Åsidosätter supports_anonymous_source metoden för att ange att det här blocket kan acceptera meddelanden som erbjuds av en källa som inte är länkad. (Åsidosätter ITarget::supports_anonymous_source.)

Anmärkningar

Mer information finns i Asynkrona meddelandeblock.

Arvshierarki

ISource

ITarget

source_block

propagator_block

transformer

Krav

Rubrik: agents.h

namnområde: samtidighet

accept_message

Accepterar ett meddelande som erbjöds av det här transformer meddelandeblocket och överför ägarskapet till anroparen.

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

Parameterar

_MsgId
Det runtime_object_identity erbjudna objektets message .

Returvärde

En pekare till objektet message som anroparen nu har ägarskap för.

consume_message

Förbrukar ett meddelande som tidigare erbjöds av transformer och reserverades av målet och överför ägarskapet till anroparen.

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

Parameterar

_MsgId
Det runtime_object_identity objekt message som används.

Returvärde

En pekare till objektet message som anroparen nu har ägarskap för.

Anmärkningar

acceptLiknar , men föregås alltid av ett anrop till reserve.

Ett återanrop som meddelar att ett nytt mål har länkats till det här transformer meddelandeblocket.

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

propagate_message

Asynkront skickar ett meddelande från ett ISource block till det här transformer meddelandeblocket. Den anropas av metoden när den propagate anropas av ett källblock.

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

Parameterar

_PMessage
En pekare till message-objektet.

_PSource
En pekare till källblocket som erbjuder meddelandet.

Returvärde

En message_status indikation på vad målet bestämde sig för att göra med meddelandet.

propagate_to_any_targets

Kör transformeringsfunktionen på indatameddelandena.

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

release_message

Släpper en tidigare meddelandereservation.

virtual void release_message(runtime_object_identity _MsgId);

Parameterar

_MsgId
Objektet runtime_object_identity som message släpps.

reserve_message

Reserverar ett meddelande som tidigare erbjöds av det här transformer meddelandeblocket.

virtual bool reserve_message(runtime_object_identity _MsgId);

Parameterar

_MsgId
Det runtime_object_identity objekt som message reserveras.

Returvärde

true om meddelandet har reserverats, false annars.

Anmärkningar

Efter reserve anropas, om det returnerar true, antingen consume eller release måste anropas för att antingen ta eller frigöra ägarskap för meddelandet.

resume_propagation

Återupptar spridning efter att en reservation har släppts.

virtual void resume_propagation();

send_message

Skickar synkront ett meddelande från ett ISource block till det här transformer meddelandeblocket. Den anropas av metoden när den send anropas av ett källblock.

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

Parameterar

_PMessage
En pekare till message-objektet.

_PSource
En pekare till källblocket som erbjuder meddelandet.

Returvärde

En message_status indikation på vad målet bestämde sig för att göra med meddelandet.

supports_anonymous_source

Åsidosätter supports_anonymous_source metoden för att ange att det här blocket kan acceptera meddelanden som erbjuds av en källa som inte är länkad.

virtual bool supports_anonymous_source();

Returvärde

true eftersom blocket inte skjuter upp erbjudna meddelanden.

transformer

Skapar ett transformer meddelandeblock.

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

Parameterar

_Func
En funktion som anropas för varje godkänt meddelande.

_PTarget
En pekare till ett målblock som ska länkas till transformatorn.

_Filter
En filterfunktion som avgör om erbjudna meddelanden ska godkännas.

_PScheduler
Det Scheduler objekt inom vilket spridningsaktiviteten för transformer meddelandeblock har schemalagts.

_PScheduleGroup
Det ScheduleGroup objekt inom vilket spridningsaktiviteten för transformer meddelandeblock har schemalagts. Det Scheduler objekt som används underförstås av schemagruppen.

Anmärkningar

Körningen använder standardschemaläggaren om du inte anger parametrarna _PScheduler eller _PScheduleGroup .

Typen _Transform_method är en functor med signatur _Output (_Input const &) som anropas av det här transformer meddelandeblocket för att bearbeta ett meddelande.

Typen filter_method är en functor med signatur bool (_Input const &) som anropas av det här transformer meddelandeblocket för att avgöra om den ska acceptera ett meddelande som erbjuds eller inte.

~transformer

Förstör meddelandeblocket transformer .

~transformer();

Se även

samtidighetsnamnområde
anropa klass