Version notifier list used for FULL value edge consumption. More...
Public Member Functions | |
edge_version_storage< T > const & | version_storage (void) const |
edge_version_storage< T > & | add_notifier (Notifier const ¬ifier, executor_base &executor, const bool b_persistent) |
Add a new notifier to the list, possibly invoking it immediately if this version of the edge value is already available. More... | |
template<typename Q > | |
void | set_value (Q &&val, executor_base *executor_ptr, const bool b_migration_enabled, const bool b_persistent) |
Receive data flow of version's edge value and invoke any registered notifiers. More... | |
bool | empty_notifications (void) const final |
Implementation of pure virtual method in abstract base edge_version_entry_base. More... | |
void | cleanup_notifications (void) final |
Implementation of pure virtual method in abstract base edge_version_entry_base. More... | |
void | clear_flow (void) final |
Implementation of pure virtual method in abstract base edge_version_entry_base. More... | |
edge_request_type | request (void) const final |
Implementation of pure virtual method in abstract base edge_version_entry_base . More... | |
bool | test_flow (void) const |
bool | test_flushing (void) const |
bool | is_direct_storage (void) const |
immutable_shared< T > | wrapper (void) const |
T && | steal (void) |
Allows stored value to be stolen by a local consumer task if a runtime check (edge_entry::stealable() conservatively detects the value is no longer needed. | |
T const & | value (void) const |
Protected Member Functions | |
template<typename NotifierInvoker > | |
void | flush_notifications (NotifierInvoker const &invoker, const bool b_persistent) |
Invoke all notifier in the list, deleting them afterwords as part of incremental PARAGRAPH destruction, unless persistency is enabled. More... | |
template<typename NotifierInvoker > | |
void | add_notifier_impl (NotifierInvoker const &invoker, Notifier const ¬ifier, const bool b_persistent) |
Add a new notifier to the list, possibly invoking it immediately if the associated data flow was previously triggered. More... | |
void | set_flow (void) |
void | clear_flushing (void) |
void | set_flushing (void) |
template<typename Q > | |
void | set_value (Q &&val) |
void | set_value (immutable_shared< T > &&wrapper) |
void | set_value (immutable_shared< T > const &wrapper) |
Protected Types | |
typedef notifier_entry< Notifier, boost::intrusive::slist_base_hook<> > | notifier_entry_t |
typedef boost::intrusive::slist< notifier_entry_t, boost::intrusive::constant_time_size< false >, boost::intrusive::cache_last< true > > | notifier_list_t |
Protected Attributes | |
notifier_list_t | m_notifications |
Version notifier list used for FULL value edge consumption.
T | The edge value type that is flowed to successors. |
Notifier | The type of notifiers this list stores. |
Hook | |
Hook | Storage for container metadata. Defined in Boost.Intrusive. Passed to base class. edge_version_entry_base . |
edge_version_storage<T>& stapl::detail::edge_version_entry< T, Notifier, Hook >::add_notifier | ( | Notifier const & | notifier, |
executor_base & | executor, | ||
const bool | b_persistent | ||
) |
Add a new notifier to the list, possibly invoking it immediately if this version of the edge value is already available.
notifier | The edge notifier that is tied to the data flow this notifier list is a part of. |
executor | The executor of the PARAGRAPH this edge version is associated with. |
b_persistent | Denotes whether persistency is enabled in the associated PARAGRAPH. |
Constructs an invoker function object which abstracts the signature of the notifier before calling generic implementation in notifier_list::add_notifier_impl.
void stapl::detail::edge_version_entry< T, Notifier, Hook >::set_value | ( | Q && | val, |
executor_base * | executor_ptr, | ||
const bool | b_migration_enabled, | ||
const bool | b_persistent | ||
) |
Receive data flow of version's edge value and invoke any registered notifiers.
val | The value from the producer task to this version. |
executor_ptr | The executor of the PARAGRAPH this edge version is associated with. |
b_migration_enabled | Denotes whether task migration is enabled in the associated PARAGRAPH. |
b_persistent | Denotes whether persistency is enabled in the associated PARAGRAPH. |
Stores the val
in m_value
and calls notifier_list::flush_notifications passing it notifier invoker to abstract the notifier's calling signature.
|
finalvirtual |
Implementation of pure virtual method in abstract base edge_version_entry_base.
Implements stapl::detail::edge_version_entry_base< Hook >.
|
finalvirtual |
Implementation of pure virtual method in abstract base edge_version_entry_base.
Implements stapl::detail::edge_version_entry_base< Hook >.
|
finalvirtual |
Implementation of pure virtual method in abstract base edge_version_entry_base.
Implements stapl::detail::edge_version_entry_base< Hook >.
|
finalvirtual |
Implementation of pure virtual method in abstract base edge_version_entry_base
.
Implements stapl::detail::edge_version_entry_base< Hook >.
|
protectedinherited |
Invoke all notifier in the list, deleting them afterwords as part of incremental PARAGRAPH destruction, unless persistency is enabled.
invoker | Higher order function object which is responsible for calling the notifier with whatever arguments are necessary. |
b_persistent | Denotes whether persistency is enabled in the associated PARAGRAPH. Guards the deletion of a notifier after it is invoked. |
This protected method is used by derived classes to implement their set_value
methods (which are called by the edge_entry when the corresponding data flow is locally triggered.
|
protectedinherited |
Add a new notifier to the list, possibly invoking it immediately if the associated data flow was previously triggered.
invoker | Higher order function object which is responsible for calling the notifier with whatever arguments are necessary. |
notifier | The edge notifier that tied to the data flow this notifier list is a part of. |
b_persistent | Denotes whether persistency is enabled in the associated PARAGRAPH. |
This protected method is used by derived classes to implement their add_notifier
methods. The derived classes construct the appropriate invoker
.
Note that even if flow is previously set, an entry may be created to either (a) allow subsequent persistent PARAGRAPH invocations or (b) maintain notifier ordering if a notifier flush is in progress.