Intel(R) Threading Building Blocks Doxygen Documentation
version 4.2.3
|
Go to the documentation of this file.
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
259 friend class internal::stage_task;
260 friend class internal::pipeline_root_task;
262 friend class thread_bound_filter;
263 friend class internal::pipeline_cleaner;
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 {
312 template<
typename T,
typename U,
typename Body>
class concrete_filter;
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);
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 deallocate(pointer p, size_type)
Free previously allocated block of memory.
filter_t< T, U > make_filter(tbb::filter::mode mode, const Body &body)
Create a filter to participate in parallel_pipeline.
void add_to(pipeline &p) __TBB_override
Add concrete_filter to pipeline.
static const unsigned char exact_exception_propagation
7th bit defines exception propagation mode expected by the application.
filter_t(filter_node *root_)
result_type __TBB_EXPORTED_METHOD try_process_item()
If a data item is available, invoke operator() on that item.
void parallel_pipeline(size_t max_number_of_live_tokens, const filter_t< void, void > &filter_chain, tbb::task_group_context &context)
filter_node_leaf(tbb::filter::mode m, const Body &b)
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
static pointer create_token(const value_type &source)
The class that represents an object of the pipeline for parallel_pipeline().
static const unsigned char filter_is_out_of_order
4th bit distinguishes ordered vs unordered filters.
pipeline * my_pipeline
Pointer to the pipeline.
void * operator()(void *) __TBB_override
Operate on an item from the input stream, and return item for output stream.
virtual __TBB_EXPORTED_METHOD ~filter()
Destroy filter.
input_filter control to signal end-of-input for parallel_pipeline
void __TBB_EXPORTED_METHOD set_end_of_input()
#define __TBB_TASK_GROUP_CONTEXT
static void destroy_token(pointer)
internal::input_buffer * my_input_buffer
Buffer for incoming tokens, or NULL if not required.
static const unsigned char current_version
token_helper< T, use_allocator< T >::value > t_helper
A stage in a pipeline served by a user thread.
tbb::tbb_allocator< T > allocator
static void * cast_to_void_ptr(pointer ref)
#define __TBB_PIPELINE_VERSION(x)
Node in parse tree representing join of two filters.
virtual void add_to(pipeline &)=0
Add concrete_filter to pipeline.
result_type __TBB_EXPORTED_METHOD process_item()
Wait until a data item becomes available, and invoke operator() on that item.
pointer allocate(size_type n, const void *=0)
Allocate space for n objects.
static const unsigned char filter_may_emit_null
6th bit marks input filters emitting small objects
token_helper< U, use_allocator< U >::value > u_helper
token_helper< T, use_allocator< T >::value > t_helper
class __TBB_DEPRECATED_MSG("tbb::tbb_hash is deprecated, use std::hash") tbb_hash
bool is_serial() const
True if filter is serial.
static pointer create_token(const value_type &source)
virtual void finalize(void *)
Destroys item if pipeline was cancelled.
static pointer cast_from_void_ptr(void *ref)
t_helper::pointer t_pointer
tbb::atomic< intptr_t > ref_count
u_helper::pointer u_pointer
void * operator()(void *input) __TBB_override
Operate on an item from the input stream, and return item for output stream.
filter * next_filter_in_pipeline
Pointer to next filter in the pipeline.
const unsigned char my_filter_mode
Storage for filter mode and dynamically checked implementation version.
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)
void add_to(pipeline &p) __TBB_override
Add concrete_filter to pipeline.
void finalize(void *input) __TBB_override
Destroys item if pipeline was cancelled.
filter * next_segment
Pointer to the next "segment" of filters, or NULL if not required.
thread_bound_filter(mode filter_mode)
Used to form groups of tasks.
@ parallel
processes multiple items in parallel and in no particular order
static const unsigned char version_mask
void add_ref()
Increment reference count.
virtual void * operator()(void *item)=0
Operate on an item from the input stream, and return item for output stream.
static void destroy_token(pointer)
concrete_filter(filter::mode filter_mode, const Body &body)
static const unsigned char filter_is_serial
The lowest bit 0 is for parallel vs. serial.
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
bool is_bound() const
True if filter is thread-bound.
void move(tbb_thread &t1, tbb_thread &t2)
void parallel_pipeline(size_t max_number_of_live_tokens, const filter_t< void, void > &filter_chain)
Abstract base class that represents a node in a parse tree underlying a filter_t.
bool is_ordered() const
True if filter must receive stream in order.
static void destroy_token(pointer token)
bool object_may_be_null()
true if an input filter can emit null
const tbb::filter::mode mode
void * operator()(void *input) __TBB_override
filter * prev_filter_in_pipeline
Pointer to previous filter in the pipeline.
token_helper< U, use_allocator< U >::value > u_helper
u_helper::pointer u_pointer
An executable node that acts as a source, i.e. it has no predecessors.
Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
static pointer cast_from_void_ptr(void *ref)
friend filter_t< T_, U_ > operator&(const filter_t< T_, V_ > &, const filter_t< V_, U_ > &)
Class representing a chain of type-safe pipeline filters.
concrete_filter(tbb::filter::mode filter_mode, const Body &body)
filter_t(tbb::filter::mode mode, const Body &body)
static value_type & token(pointer &t)
pipeline_proxy(const filter_t< void, void > &filter_chain)
friend filter_t< T_, U_ > make_filter(tbb::filter::mode, const Body &)
Create a filter to participate in parallel_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 * task
bool has_more_work()
has the filter not yet processed all the tokens it will ever see?
static pointer create_token(value_type &&source)
static value_type & token(pointer &t)
static value_type & token(pointer &t)
Base class for types that should not be copied or assigned.
result_type internal_process_item(bool is_blocking)
Internal routine for item processing.
void destroy(pointer p)
Destroy value at location pointed to by p.
filter_t(const filter_t< T, U > &rhs)
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
static void * cast_to_void_ptr(pointer ref)
Node in parse tree representing result of make_filter.
static void * cast_to_void_ptr(pointer ref)
void remove_ref()
Decrement reference count and delete if it becomes zero.
void const char const char int ITT_FORMAT __itt_group_sync p
@ serial_out_of_order
processes items one at a time and in no particular order
#define __TBB_EXPORTED_METHOD
filter_t< T, U > operator&(const filter_t< T, V > &left, const filter_t< V, U > &right)
tbb::pipeline * operator->()
internal::filter_node filter_node
t_helper::pointer t_pointer
static pointer cast_from_void_ptr(void *ref)
@ serial_in_order
processes items one at a time; all such filters process items in the same order
A buffer of input items for a filter.
void operator=(const filter_t< T, U > &rhs)
void * operator()(void *) __TBB_override
Operate on an item from the input stream, and return item for output stream.
concrete_filter(tbb::filter::mode filter_mode, const Body &body)
filter_node_join(filter_node &x, filter_node &y)
void finalize(void *input) __TBB_override
static filter * not_in_pipeline()
Value used to mark "not in pipeline".
static const unsigned char filter_is_bound
5th bit distinguishes thread-bound and regular filters.
Copyright © 2005-2020 Intel Corporation. All Rights Reserved.
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
subsidiaries in the United States and other countries.
* Other names and brands may be claimed as the property of others.