17 #ifndef __TBB_pipeline_H    18 #define __TBB_pipeline_H    20 #define __TBB_pipeline_H_include_area    28 #if __TBB_CPP11_TYPE_PROPERTIES_PRESENT    29 #include <type_traits>    41 #define __TBB_PIPELINE_VERSION(x) ((unsigned char)(x-2)<<1)    52 namespace interface6 {
    53     template<
typename T, 
typename U> 
class filter_t;
    85 #if TBB_USE_CAPTURED_EXCEPTION   155 #if __TBB_TASK_GROUP_CONTEXT   250 #if __TBB_TASK_GROUP_CONTEXT   276     atomic<internal::Token> input_tokens;
   279     atomic<internal::Token> token_counter;
   285     bool has_thread_bound_filters;
   288     void remove_filter( 
filter& filter_ );
   293 #if __TBB_TASK_GROUP_CONTEXT   294     void clear_filters();
   304 namespace interface11 {
   305     template<
typename Output> 
class input_node;
   309 namespace interface6 {
   329 #if   __TBB_CPP11_TYPE_PROPERTIES_PRESENT   349 #if !_MSC_VER || defined(_NATIVE_WCHAR_T_DEFINED)   352 #endif // tbb_trivially_copyable   370 #if __TBB_CPP11_RVALUE_REF_PRESENT   407     } type_to_void_ptr_map;
   414         type_to_void_ptr_map mymap;
   415         mymap.void_overlay = NULL;
   416         mymap.actual_value = ref;
   417         return mymap.void_overlay;
   420         type_to_void_ptr_map mymap;
   421         mymap.void_overlay = ref;
   422         return mymap.actual_value;
   428 template<
typename T, 
typename U, 
typename Body>
   437         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
   439         t_helper::destroy_token(temp_input);
   440         return u_helper::cast_to_void_ptr(output_u);
   444         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
   445         t_helper::destroy_token(temp_input);
   453 template<
typename U, 
typename Body>
   463             u_helper::destroy_token(output_u);
   467         return u_helper::cast_to_void_ptr(output_u);
   478 template<
typename T, 
typename Body>
   485         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
   487         t_helper::destroy_token(temp_input);
   491         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
   492         t_helper::destroy_token(temp_input);
   499 template<
typename Body>
   534 #ifdef __TBB_TEST_FILTER_NODE_COUNT   535         ++(__TBB_TEST_FILTER_NODE_COUNT);
   540     virtual void add_to( pipeline& ) = 0;
   550 #ifdef __TBB_TEST_FILTER_NODE_COUNT   551         --(__TBB_TEST_FILTER_NODE_COUNT);
   557 template<
typename T, 
typename U, 
typename Body>
   593 template<
typename T, 
typename U, 
typename Body>
   598 template<
typename T, 
typename V, 
typename U>
   600     __TBB_ASSERT(left.
root,
"cannot use default-constructed filter_t as left argument of '&'");
   601     __TBB_ASSERT(right.
root,
"cannot use default-constructed filter_t as right argument of '&'");
   606 template<
typename T, 
typename U>
   614     template<
typename T_, 
typename U_, 
typename Body>
   616     template<
typename T_, 
typename V_, 
typename U_>
   624     template<
typename Body>
   652     __TBB_ASSERT( filter_chain.
root, 
"cannot apply parallel_pipeline to default-constructed filter_t"  );
   663     pipe->run(max_number_of_live_tokens
   670 #if __TBB_TASK_GROUP_CONTEXT   675 #endif // __TBB_TASK_GROUP_CONTEXT   679 using interface6::flow_control;
   680 using interface6::filter_t;
   687 #undef __TBB_pipeline_H_include_area void finalize(void *input) __TBB_override
Destroys item if pipeline was cancelled.
 
void operator=(const filter_t< T, U > &rhs)
 
static const unsigned char current_version
 
processes items one at a time and in no particular order
 
tbb::atomic< intptr_t > ref_count
 
pointer allocate(size_type n, const void *=0)
Allocate space for n objects.
 
tbb::pipeline * operator->()
 
static void * cast_to_void_ptr(pointer ref)
 
u_helper::pointer u_pointer
 
Used to form groups of tasks.
 
void parallel_pipeline(size_t max_number_of_live_tokens, const filter_t< void, void > &filter_chain, tbb::task_group_context &context)
 
virtual void add_to(pipeline &)=0
Add concrete_filter to pipeline.
 
static pointer cast_from_void_ptr(void *ref)
 
pipeline_proxy(const filter_t< void, void > &filter_chain)
 
result_type internal_process_item(bool is_blocking)
Internal routine for item processing.
 
#define __TBB_TASK_GROUP_CONTEXT
 
bool object_may_be_null()
true if an input filter can emit null
 
void * operator()(void *) __TBB_override
Operate on an item from the input stream, and return item for output stream.
 
filter_node_leaf(tbb::filter::mode m, const Body &b)
 
result_type __TBB_EXPORTED_METHOD process_item()
Wait until a data item becomes available, and invoke operator() on that item.
 
concrete_filter(filter::mode filter_mode, const Body &body)
 
static const unsigned char filter_may_emit_null
6th bit marks input filters emitting small objects
 
static value_type & token(pointer &t)
 
static const unsigned char filter_is_bound
5th bit distinguishes thread-bound and regular filters.
 
static void destroy_token(pointer token)
 
Base class for user-defined tasks.
 
Abstract base class that represents a node in a parse tree underlying a filter_t.
 
void add_ref()
Increment reference count.
 
void * operator()(void *) __TBB_override
Operate on an item from the input stream, and return item for output stream.
 
pipeline * my_pipeline
Pointer to the pipeline.
 
static pointer create_token(const value_type &source)
 
t_helper::pointer t_pointer
 
bool is_bound() const
True if filter is thread-bound.
 
#define __TBB_PIPELINE_VERSION(x)
 
internal::input_buffer * my_input_buffer
Buffer for incoming tokens, or NULL if not required.
 
const tbb::filter::mode mode
 
processes multiple items in parallel and in no particular order
 
tbb::tbb_allocator< T > allocator
 
filter * next_segment
Pointer to the next "segment" of filters, or NULL if not required.
 
token_helper< U, use_allocator< U >::value > u_helper
 
bool has_more_work()
has the filter not yet processed all the tokens it will ever see?
 
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t mode
 
concrete_filter(tbb::filter::mode filter_mode, const Body &body)
 
t_helper::pointer t_pointer
 
bool is_serial() const
True if filter is serial.
 
static const unsigned char filter_is_serial
The lowest bit 0 is for parallel vs. serial.
 
concrete_filter(tbb::filter::mode filter_mode, const Body &body)
 
A buffer of input items for a filter.
 
static const unsigned char version_mask
 
class __TBB_DEPRECATED_MSG("tbb::tbb_hash is deprecated, use std::hash") tbb_hash
 
static void destroy_token(pointer)
 
concrete_filter(tbb::filter::mode filter_mode, const Body &body)
 
void remove_ref()
Decrement reference count and delete if it becomes zero.
 
Node in parse tree representing join of two filters.
 
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d int
 
token_helper< T, use_allocator< T >::value > t_helper
 
friend filter_t< T_, U_ > make_filter(tbb::filter::mode, const Body &)
Create a filter to participate in parallel_pipeline.
 
The class that represents an object of the pipeline for parallel_pipeline().
 
token_helper< T, use_allocator< T >::value > t_helper
 
static pointer create_token(const value_type &source)
 
void add_to(pipeline &p) __TBB_override
Add concrete_filter to pipeline.
 
filter_t(filter_node *root_)
 
result_type __TBB_EXPORTED_METHOD try_process_item()
If a data item is available, invoke operator() on that item.
 
An executable node that acts as a source, i.e. it has no predecessors.
 
filter * next_filter_in_pipeline
Pointer to next filter in the pipeline.
 
virtual void finalize(void *)
Destroys item if pipeline was cancelled.
 
static void * cast_to_void_ptr(pointer ref)
 
static const unsigned char exact_exception_propagation
7th bit defines exception propagation mode expected by the application.
 
Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
 
filter * prev_filter_in_pipeline
Pointer to previous filter in the pipeline.
 
void const char const char int ITT_FORMAT __itt_group_sync p
 
Node in parse tree representing result of make_filter.
 
token_helper< U, use_allocator< U >::value > u_helper
 
filter_t(tbb::filter::mode mode, const Body &body)
 
processes items one at a time; all such filters process items in the same order
 
static const unsigned char filter_is_out_of_order
4th bit distinguishes ordered vs unordered filters.
 
bool is_ordered() const
True if filter must receive stream in order.
 
void finalize(void *input) __TBB_override
Destroys item if pipeline was cancelled.
 
void __TBB_EXPORTED_METHOD set_end_of_input()
 
u_helper::pointer u_pointer
 
filter_t< T, U > operator &(const filter_t< T, V > &left, const filter_t< V, U > &right)
 
internal::filter_node filter_node
 
Base class for types that should not be copied or assigned.
 
static pointer cast_from_void_ptr(void *ref)
 
void * operator()(void *input) __TBB_override
Operate on an item from the input stream, and return item for output stream.
 
static void destroy_token(pointer)
 
filter_node_join(filter_node &x, filter_node &y)
 
void parallel_pipeline(size_t max_number_of_live_tokens, const filter_t< void, void > &filter_chain)
 
Class representing a chain of type-safe pipeline filters.
 
void * operator()(void *input) __TBB_override
Operate on an item from the input stream, and return item for output stream.
 
void destroy(pointer p)
Destroy value at location pointed to by p.
 
static value_type & token(pointer &t)
 
static pointer create_token(value_type &&source)
 
virtual void * operator()(void *item)=0
Operate on an item from the input stream, and return item for output stream.
 
filter_t< T, U > make_filter(tbb::filter::mode mode, const Body &body)
Create a filter to participate in parallel_pipeline.
 
#define __TBB_EXPORTED_METHOD
 
static filter * not_in_pipeline()
Value used to mark "not in pipeline".
 
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
 
A stage in a pipeline served by a user thread.
 
void deallocate(pointer p, size_type)
Free previously allocated block of memory.
 
void add_to(pipeline &p) __TBB_override
Add concrete_filter to pipeline.
 
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value
 
thread_bound_filter(mode filter_mode)
 
static pointer cast_from_void_ptr(void *ref)
 
static void * cast_to_void_ptr(pointer ref)
 
filter_t(const filter_t< T, U > &rhs)
 
input_filter control to signal end-of-input for parallel_pipeline
 
virtual __TBB_EXPORTED_METHOD ~filter()
Destroy filter.
 
const unsigned char my_filter_mode
Storage for filter mode and dynamically checked implementation version.
 
static value_type & token(pointer &t)
 
friend filter_t< T_, U_ > operator &(const filter_t< T_, V_ > &, const filter_t< V_, U_ > &)
 
void move(tbb_thread &t1, tbb_thread &t2)