STLdoc
STLdocumentation
|
Helper class used in multi-type greedy join blocks Ordered node is a single-target, single-source ordered propagator block More...
#include <agents.h>
Public Member Functions | |
_Greedy_node (ISource< _Type > *_PSource, size_t _Index, ITarget< size_t > *_PTarget=NULL) | |
Constructs a _Greedy_node within the default scheduler, and places it on any schedule group of the scheduler's choosing. More... | |
_Greedy_node (ISource< _Type > *_PSource, size_t _Index, ITarget< size_t > *_PTarget, filter_method const &_Filter) | |
Constructs a _Greedy_node within the default scheduler, and places it on any schedule group of the scheduler's choosing. More... | |
_Greedy_node (Scheduler &_PScheduler, ISource< _Type > *_PSource, size_t _Index, ITarget< size_t > *_PTarget=NULL) | |
Constructs a _Greedy_node within the specified scheduler, and places it on any schedule group of the scheduler's choosing. More... | |
_Greedy_node (Scheduler &_PScheduler, ISource< _Type > *_PSource, size_t _Index, ITarget< size_t > *_PTarget, filter_method const &_Filter) | |
Constructs a _Greedy_node within the specified scheduler, and places it on any schedule group of the scheduler's choosing. More... | |
_Greedy_node (ScheduleGroup &_PScheduleGroup, ISource< _Type > *_PSource, size_t _Index, ITarget< size_t > *_PTarget=NULL) | |
Constructs a _Greedy_node within the specified schedule group. The scheduler is implied by the schedule group. More... | |
_Greedy_node (ScheduleGroup &_PScheduleGroup, ISource< _Type > *_PSource, size_t _Index, ITarget< size_t > *_PTarget, filter_method const &_Filter) | |
Constructs a _Greedy_node within the specified schedule group. The scheduler is implied by the schedule group. More... | |
~_Greedy_node () | |
Cleans up any resources that may have been created by the _Greedy_node. More... | |
void | _Reset () |
Resets the _Greedy_node and prepares it for the next propagation More... | |
![]() | |
_Order_node_base () | |
Constructs a _Order_node_base within the default scheduler, and places it on any schedule group of the scheduler's choosing. More... | |
~_Order_node_base () | |
Cleans up any resources that may have been created by the _Order_node. More... | |
bool | has_value () const |
Checks whether this block has been initialized yet. More... | |
_Type const & | value () |
Gets a reference to the current payload of the message being stored. More... | |
virtual bool | reserve_message (runtime_object_identity) |
Reserves a message previously offered by the source. More... | |
virtual message< size_t > * | consume_message (runtime_object_identity) |
Consumes a message previously offered by the source and reserved by the target, transferring ownership to the caller. More... | |
virtual void | release_message (runtime_object_identity) |
Releases a previous message reservation. More... | |
![]() | |
propagator_block () | |
Constructs a propagator_block object. More... | |
virtual | ~propagator_block () |
Destroys a propagator_block object. More... | |
virtual message_status | propagate (_Inout_opt_ message< _Source_type > *_PMessage, _Inout_opt_ ISource< _Source_type > *_PSource) |
Asynchronously passes a message from a source block to this target block. More... | |
virtual message_status | send (_Inout_ message< _Source_type > *_PMessage, _Inout_ ISource< _Source_type > *_PSource) |
Synchronously initiates a message to this block. Called by an ISource block. When this function completes, the message will already have propagated into the block. More... | |
![]() | |
source_block () | |
Constructs a source_block object. More... | |
virtual | ~source_block () |
Destroys the source_block object. More... | |
virtual void | link_target (_Inout_ ITarget< _Target_type > *_PTarget) |
Links a target block to this source_block object. More... | |
virtual void | unlink_target (_Inout_ ITarget< _Target_type > *_PTarget) |
Unlinks a target block from this source_block object. More... | |
virtual void | unlink_targets () |
Unlinks all target blocks from this source_block object. More... | |
virtual message< _Target_type > * | accept (runtime_object_identity _MsgId, _Inout_ ITarget< _Target_type > *_PTarget) |
Accepts a message that was offered by this source_block object, transferring ownership to the caller. More... | |
virtual bool | reserve (runtime_object_identity _MsgId, _Inout_ ITarget< _Target_type > *_PTarget) |
Reserves a message previously offered by this source_block object. More... | |
virtual message< _Target_type > * | consume (runtime_object_identity _MsgId, _Inout_ ITarget< _Target_type > *_PTarget) |
Consumes a message previously offered by this source_block object and successfully reserved by the target, transferring ownership to the caller. More... | |
virtual void | release (runtime_object_identity _MsgId, _Inout_ ITarget< _Target_type > *_PTarget) |
Releases a previous successful message reservation. More... | |
virtual void | acquire_ref (_Inout_ ITarget< _Target_type > *) |
Acquires a reference count on this source_block object, to prevent deletion. More... | |
virtual void | release_ref (_Inout_ ITarget< _Target_type > *_PTarget) |
Releases a reference count on this source_block object. More... | |
![]() | |
virtual | ~ISource () |
Destroys the ISource object. More... | |
virtual void | link_target (_Inout_ ITarget< single_link_registry< ITarget< size_t > >::type::type > *_PTarget)=0 |
When overridden in a derived class, links a target block to this ISource block. More... | |
virtual void | unlink_target (_Inout_ ITarget< single_link_registry< ITarget< size_t > >::type::type > *_PTarget)=0 |
When overridden in a derived class, unlinks a target block from this ISource block, if found to be previously linked. More... | |
virtual message< single_link_registry< ITarget< size_t > >::type::type > * | accept (runtime_object_identity _MsgId, _Inout_ ITarget< single_link_registry< ITarget< size_t > >::type::type > *_PTarget)=0 |
When overridden in a derived class, accepts a message that was offered by this ISource block, transferring ownership to the caller. More... | |
virtual bool | reserve (runtime_object_identity _MsgId, _Inout_ ITarget< single_link_registry< ITarget< size_t > >::type::type > *_PTarget)=0 |
When overridden in a derived class, reserves a message previously offered by this ISource block. More... | |
virtual message< single_link_registry< ITarget< size_t > >::type::type > * | consume (runtime_object_identity _MsgId, _Inout_ ITarget< single_link_registry< ITarget< size_t > >::type::type > *_PTarget)=0 |
When overridden in a derived class, consumes a message previously offered by this ISource block and successfully reserved by the target, transferring ownership to the caller. More... | |
virtual void | release (runtime_object_identity _MsgId, _Inout_ ITarget< single_link_registry< ITarget< size_t > >::type::type > *_PTarget)=0 |
When overridden in a derived class, releases a previous successful message reservation. More... | |
virtual void | acquire_ref (_Inout_ ITarget< single_link_registry< ITarget< size_t > >::type::type > *_PTarget)=0 |
When overridden in a derived class, acquires a reference count on this ISource block, to prevent deletion. More... | |
virtual void | release_ref (_Inout_ ITarget< single_link_registry< ITarget< size_t > >::type::type > *_PTarget)=0 |
When overridden in a derived class, releases a reference count on this ISource block. More... | |
![]() | |
virtual | ~ITarget () |
Destroys the ITarget object. More... | |
virtual message_status | propagate (_Inout_opt_ message< multi_link_registry< ISource< _Type > >::type::source_type > *_PMessage, _Inout_opt_ ISource< multi_link_registry< ISource< _Type > >::type::source_type > *_PSource)=0 |
When overridden in a derived class, asynchronously passes a message from a source block to this target block. More... | |
virtual message_status | send (_Inout_ message< multi_link_registry< ISource< _Type > >::type::source_type > *_PMessage, _Inout_ ISource< multi_link_registry< ISource< _Type > >::type::source_type > *_PSource)=0 |
When overridden in a derived class, synchronously passes a message to the target block. More... | |
virtual bool | supports_anonymous_source () |
When overridden in a derived class, returns true or false depending on whether the message block accepts messages offered by a source that is not linked to it. If the overridden method returns true , the target cannot postpone an offered message, as consumption of a postponed message at a later time requires the source to be identified in its source link registry. More... | |
Protected Member Functions | |
virtual message_status | propagate_message (message< _Type > *_PMessage, ISource< _Type > *_PSource) |
Asynchronously passes a message from an ISource block to this ITarget block. It is invoked by the propagate method, when called by a source block. More... | |
virtual message< size_t > * | accept_message (runtime_object_identity _MsgId) |
Accept the message by making a copy of the payload. More... | |
virtual void | propagate_to_any_targets (_Inout_opt_ message< size_t > *) |
Takes the message and propagates it to all the targets of this _Greedy_node More... | |
![]() | |
virtual void | resume_propagation () |
Resumes propagation after a reservation has been released More... | |
virtual void | link_target_notification (_Inout_ ITarget< size_t > *) |
Notification that a target was linked to this source. More... | |
void | _Create_send_message () |
Create a message that contains an index used to determine the source message More... | |
void | _Initialize_order_node (ISource< _Type > *_PSource, size_t _Index, ITarget< size_t > *_PTarget, Scheduler *_PScheduler=NULL, ScheduleGroup *_PScheduleGroup=NULL) |
Validate constructor arguments and fully connect this _Order_node_base. More... | |
![]() | |
virtual message_status | propagate_message (_Inout_ message< _Source_type > *_PMessage, _Inout_ ISource< _Source_type > *_PSource)=0 |
When overridden in a derived class, this method asynchronously passes a message from an ISource block to this propagator_block object. It is invoked by the propagate method, when called by a source block. More... | |
virtual message_status | send_message (_Inout_ message< _Source_type > *, _Inout_ ISource< _Source_type > *) |
When overridden in a derived class, this method synchronously passes a message from an ISource block to this propagator_block object. It is invoked by the send method, when called by a source block. More... | |
virtual void | link_source (_Inout_ ISource< _Source_type > *_PSource) |
Links a specified source block to this propagator_block object. More... | |
virtual void | unlink_source (_Inout_ ISource< _Source_type > *_PSource) |
Unlinks a specified source block from this propagator_block object. More... | |
virtual void | unlink_sources () |
Unlinks all source blocks from this propagator_block object. More... | |
virtual void | process_input_messages (_Inout_ message< _Target_type > *) |
Process input messages. This is only useful for propagator blocks, which derive from source_block More... | |
void | initialize_source_and_target (_Inout_opt_ Scheduler *_PScheduler=NULL, _Inout_opt_ ScheduleGroup *_PScheduleGroup=NULL) |
Initializes the base object. Specifically, the message_processor object needs to be initialized. More... | |
void | register_filter (filter_method const &_Filter) |
Registers a filter method that will be invoked on every received message. More... | |
void | decline_incoming_messages () |
Indicates to the block that new messages should be declined. More... | |
void | remove_network_links () |
Removes all the source and target network links from this propagator_block object. More... | |
![]() | |
virtual void | link_target_notification (_Inout_ ITarget< _Target_type > *) |
A callback that notifies that a new target has been linked to this source_block object. More... | |
virtual void | unlink_target_notification (_Inout_ ITarget< _Target_type > *_PTarget) |
A callback that notifies that a target has been unlinked from this source_block object. More... | |
virtual void | propagate_output_messages () |
Propagate messages to targets. More... | |
virtual void | propagate_to_any_targets (_Inout_opt_ message< _Target_type > *_PMessage) |
When overridden in a derived class, propagates the given message to any or all of the linked targets. This is the main propagation routine for message blocks. More... | |
void | initialize_source (_Inout_opt_ Scheduler *_PScheduler=NULL, _Inout_opt_ ScheduleGroup *_PScheduleGroup=NULL) |
Initializes the message_propagator within this source_block . More... | |
void | enable_batched_processing () |
Enables batched processing for this block. More... | |
virtual void | sync_send (_Inout_opt_ message< _Target_type > *_Msg) |
Synchronously queues up messages and starts a propagation task, if this has not been done already. More... | |
virtual void | async_send (_Inout_opt_ message< _Target_type > *_Msg) |
Asynchronously queues up messages and starts a propagation task, if this has not been done already More... | |
void | wait_for_outstanding_async_sends () |
Waits for all asynchronous propagations to complete. This propagator-specific spin wait is used in destructors of message blocks to make sure that all asynchronous propagations have time to finish before destroying the block. More... | |
void | remove_targets () |
Removes all target links for this source block. This should be called from the destructor. More... | |
![]() | |
void | _Invoke_link_source (ITarget< single_link_registry< ITarget< size_t > >::type::type > *_PLinkFrom) |
Links this source to a target. More... | |
void | _Invoke_unlink_source (ITarget< single_link_registry< ITarget< size_t > >::type::type > *_PUnlinkFrom) |
Unlinks this source from a target. More... | |
![]() | |
virtual void | link_source (_Inout_ ISource< multi_link_registry< ISource< _Type > >::type::source_type > *_PSource)=0 |
When overridden in a derived class, links a specified source block to this ITarget block. More... | |
virtual void | unlink_source (_Inout_ ISource< multi_link_registry< ISource< _Type > >::type::source_type > *_PSource)=0 |
When overridden in a derived class, unlinks a specified source block from this ITarget block. More... | |
Private Types | |
typedef single_link_registry< ITarget< size_t > > | _TargetLinkRegistry |
typedef multi_link_registry< ISource< _Type > > | _SourceLinkRegistry |
Private Member Functions | |
_Greedy_node const & | operator= (_Greedy_node const &) |
_Greedy_node (_Greedy_node const &) | |
Additional Inherited Members | |
![]() | |
typedef multi_link_registry< ISource< _Type > >::type::source_type | _Source_type |
The type of the payload for the incoming message to this propagator_block . More... | |
typedef source_link_manager< multi_link_registry< ISource< _Type > > > | _SourceLinkManager |
The type of the source_link_manager this propagator_block . More... | |
typedef _SourceLinkManager::iterator | source_iterator |
The type of the iterator for the source_link_manager for this propagator_block . More... | |
![]() | |
typedef single_link_registry< ITarget< size_t > >::type::type | _Target_type |
The payload type of messages handled by this source_block . More... | |
typedef single_link_registry< ITarget< size_t > >::iterator | target_iterator |
The iterator to walk the connected targets. More... | |
![]() | |
typedef single_link_registry< ITarget< size_t > >::type::type | source_type |
A type alias for _Type . More... | |
![]() | |
typedef multi_link_registry< ISource< _Type > >::type::source_type | type |
A type alias for _Type . More... | |
typedef std::function< bool(multi_link_registry< ISource< _Type > >::type::source_typeconst &)> | filter_method |
The signature of any method used by the block that returns a bool value to determine whether an offered message should be accepted. More... | |
![]() | |
message< _Type > * | _M_pReceiveMessage |
message< size_t > * | _M_pSendMessage |
size_t | _M_index |
![]() | |
_SourceLinkManager | _M_connectedSources |
The container for all the sources connected to this block. More... | |
filter_method * | _M_pFilter |
The filter function which determines whether offered messages should be accepted. More... | |
volatile bool | _M_fDeclineMessages |
A bool that is set to indicate that all messages should be declined in preparation for deleting the block More... | |
![]() | |
ITarget< _Target_type > * | _M_pReservedFor |
Connected target that is holding a reservation More... | |
runtime_object_identity | _M_reservedId |
Reserved message ID More... | |
single_link_registry< ITarget< size_t > > | _M_connectedTargets |
Connected targets More... | |
_MessageProcessorType | _M_messageProcessor |
Processor used for asynchronous message handling More... | |
Helper class used in multi-type greedy join blocks Ordered node is a single-target, single-source ordered propagator block
_Type | The payload type |
|
private |
|
private |
|
inline |
Constructs a _Greedy_node within the default scheduler, and places it on any schedule group of the scheduler's choosing.
_PSource | The source of data passed into the node |
_Index | The node's index, assigned from the outside. |
_PTarget | The target to which the node will signal about having received its input data |
|
inline |
Constructs a _Greedy_node within the default scheduler, and places it on any schedule group of the scheduler's choosing.
_PSource | The source of data passed into the node |
_Index | The node's index, assigned from the outside. |
_PTarget | The target to which the node will signal about having received its input data |
_Filter | A reference to a filter function. |
|
inline |
Constructs a _Greedy_node within the specified scheduler, and places it on any schedule group of the scheduler's choosing.
_PScheduler | A reference to a scheduler instance. |
_PSource | The source of data passed into the node |
_Index | The node's index, assigned from the outside. |
_PTarget | The target to which the node will signal about having received its input data |
|
inline |
Constructs a _Greedy_node within the specified scheduler, and places it on any schedule group of the scheduler's choosing.
_PScheduler | A reference to a scheduler instance. |
_PSource | The source of data passed into the node |
_Index | The node's index, assigned from the outside. |
_PTarget | The target to which the node will signal about having received its input data |
_Filter | A reference to a filter function. |
|
inline |
Constructs a _Greedy_node within the specified schedule group. The scheduler is implied by the schedule group.
_PScheduleGroup | A reference to a schedule group. |
_PSource | The source of data passed into the node |
_Index | The node's index, assigned from the outside. |
_PTarget | The target to which the node will signal about having received its input data |
|
inline |
Constructs a _Greedy_node within the specified schedule group. The scheduler is implied by the schedule group.
_PScheduleGroup | A reference to a schedule group. |
_PSource | The source of data passed into the node |
_Index | The node's index, assigned from the outside. |
_PTarget | The target to which the node will signal about having received its input data |
_Filter | A reference to a filter function. |
|
inline |
Cleans up any resources that may have been created by the _Greedy_node.
|
private |
|
inlinevirtual |
Resets the _Greedy_node and prepares it for the next propagation
_Reset is called from Populate_destination_tuple through propagate_to_any_targets() thus, it always has the internal lock held.
Implements Concurrency::_Order_node_base< _Type >.
|
inlineprotectedvirtual |
Accept the message by making a copy of the payload.
_MsgId | The runtime object identity of the message. |
Implements Concurrency::source_block< single_link_registry< ITarget< size_t > >, _MessageProcessorType >.
|
private |
|
inlineprotectedvirtual |
Asynchronously passes a message from an ISource
block to this ITarget
block. It is invoked by the propagate
method, when called by a source block.
_PMessage | A pointer to the message object. |
_PSource | A pointer to the source block offering the message. |
It is important that calls to propagate do not take the same lock on the internal structure that is used by Consume and the light-weight task. Doing so could result in a deadlock with the Consume call.
|
inlineprotectedvirtual |
Takes the message and propagates it to all the targets of this _Greedy_node
_PMessage | A pointer to a new message. |
This function packages its _M_index into a message and immediately sends it to the targets.
|
private |
|
private |
|
private |
|
private |