buffer_node#
[flow_graph.buffer_node]
A node that is an unbounded buffer of messages. Messages are forwarded in an arbitrary order.
// Defined in header <oneapi/tbb/flow_graph.h>
namespace oneapi {
namespace tbb {
namespace flow {
template< typename T>
class buffer_node : public graph_node, public receiver<T>, public sender<T> {
public:
explicit buffer_node( graph &g );
buffer_node( const buffer_node &src );
~buffer_node();
// Preview feature: Helper Functions for Expressing Graphs
explicit buffer_node(decltype(follows(...)));
explicit buffer_node(decltype(precedes(...)));
bool try_put( const T &v );
bool try_get( T &v );
// Preview feature: Waiting for Single Message
bool try_put_and_wait( const T& v );
};
} // namespace flow
} // namespace tbb
} // namespace oneapi
Requirements:
The type
Tmust meet the CopyConstructible requirements from [copyconstructible] and CopyAssignable requirements from [copyassignable] ISO C++ Standard sections.
buffer_node is a graph_node, receiver<T>, and sender<T>.
buffer_node has a buffering and single-push properties.
buffer_node forwards messages in an arbitrary order to a single successor in its successor set.
Member functions#
-
explicit buffer_node(const buffer_node &src)#
Constructs an empty
buffer_nodethat belongs to the same graphgassrc. Any intermediate state ofsrc, including its links to predecessors and successors, is not copied.
-
bool try_put(const T &v)#
Adds
vto the set of items managed by the node, and tries forwarding it to a successor.Returns:
true
-
bool try_get(T &v)#
Returns:
trueif an item can be removed from the node and assigned tov. Returnsfalseif there is no non-reserved item currently in the node.
Preview Features#
The following preview features extend the buffer_node API:
Helper Functions for Expressing Graphs - allows
buffer_nodeto be constructed as a successor or a predecessor of the set of nodes.Waiting for Single Message in Flow Graph - allows to put messages to
buffer_nodeand wait for all related work to complete.