17 #ifndef __TBB_parallel_while 18 #define __TBB_parallel_while 20 #define __TBB_parallel_while_H_include_area 28 template<
typename Body>
34 template<
typename Stream,
typename Body>
class while_task;
39 template<
typename Body>
57 template<
typename Body>
72 if( ++k==
size )
break;
80 template<
typename Stream,
typename Body_>
friend class while_task;
86 template<
typename Stream,
typename Body>
93 block_type& t = *
new( allocate_additional_child_of(
my_barrier) ) block_type(
my_body);
95 while(
my_stream.pop_if_present(t.my_arg[k]) ) {
96 if( ++k==block_type::max_arg_size ) {
127 template<
typename Body>
148 template<
typename Stream>
149 void run( Stream& stream,
const Body& body );
160 template<
typename Body>
161 template<
typename Stream>
166 my_barrier = &barrier;
170 my_barrier->destroy(*my_barrier);
175 template<
typename Body>
177 __TBB_ASSERT(my_barrier,
"attempt to add to parallel_while that is not running");
179 iteration_type& i = *
new( task::allocate_additional_child_of(*my_barrier) ) iteration_type(item,*my_body);
186 #undef __TBB_parallel_while_H_include_area
void recycle_to_reexecute()
Schedule this for reexecution after current execute() returns.
void spawn_and_wait_for_all(task &child)
Similar to spawn followed by wait_for_all, but more efficient.
void push_back(task &task)
Push task onto back of list.
Base class for user-defined tasks.
task * execute() __TBB_override
Should be overridden by derived classes.
task * execute() __TBB_override
Should be overridden by derived classes.
Body::argument_type my_arg[max_arg_size]
static internal::allocate_root_proxy allocate_root()
Returns proxy for overloaded new that allocates a root task.
Body::argument_type value_type
Type of items.
task * execute() __TBB_override
Should be overridden by derived classes.
internal::allocate_child_proxy & allocate_child()
Returns proxy for overloaded new that allocates a child task of *this.
while_iteration_task(const typename Body::argument_type &value, const Body &body)
task that does nothing. Useful for synchronization.
while_task(Stream &stream, const Body &body, empty_task &barrier)
static task &__TBB_EXPORTED_FUNC self()
The innermost task being executed or destroyed by the current thread at the moment.
Base class for types that should not be copied or assigned.
void set_ref_count(int count)
Set reference count.
while_group_task(const Body &body)
Parallel iteration over a stream, with optional addition of more work.
void add(const value_type &item)
Add a work item while running.
~parallel_while()
Destructor cleans up data members before returning.
void run(Stream &stream, const Body &body)
Apply body.apply to each item in the stream.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
parallel_while()
Construct empty non-running parallel while.
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
Body::argument_type my_value
static const size_t max_arg_size