Lines Matching refs:Body

44 template <typename Body, typename ItemType, typename FeederItemType>
45 concept parallel_for_each_body = std::invocable<const std::remove_reference_t<Body>&, ItemType&&> ||
46 …std::invocable<const std::remove_reference_t<Body>&, ItemType&&, tbb::detail::d1::feeder<FeederIte…
51 template<typename Body, typename Item> class feeder_impl;
79 template<class Body>
83 static auto call(const Body& body, ItemArg&& item, FeederArg*)
99 static auto call(const Body& body, ItemArg&& item, FeederArg* feeder)
116 template<typename Body, typename Item>
118 using feeder_type = feeder_impl<Body, Item>;
139 …-> decltype(parallel_for_each_operator_selector<Body>::call(call_body, std::move(call_item), &call…
141 … parallel_for_each_operator_selector<Body>::call(call_body, std::move(call_item), &call_feeder);
146 parallel_for_each_operator_selector<Body>::call(call_body, call_item, &call_feeder); in call()
167 template<typename Body, typename Item>
171 using feeder_task = feeder_item_task<Body, Item>; in internal_add_copy_impl()
188 using feeder_task = feeder_item_task<Body, Item>; in internal_add_move()
196 feeder_impl(const Body& body, wait_context& w_context, task_group_context &context) in feeder_impl()
202 const Body& my_body;
209 template<typename Iterator, typename Body, typename Item>
211 using feeder_type = feeder_impl<Body, Item>;
213 …for_each_iteration_task(Iterator input_item_ptr, const Body& body, feeder_impl<Body, Item>* feeder… in for_each_iteration_task()
222 parallel_for_each_operator_selector<Body>::call(my_body, *item_ptr, my_feeder_ptr); in execute()
233 const Body& my_body;
234 feeder_impl<Body, Item>* my_feeder_ptr;
240 template <typename Body, typename Item, typename = void>
247 template <typename Body, typename Item>
248 struct input_iteration_task_iterator_helper<Body, Item,
249 …etail::void_t<decltype(parallel_for_each_operator_selector<Body>::call(std::declval<const Body&>(),
251 … std::declval<feeder_impl<Body, Item>*>()))>>
258 template <typename Body, typename Item>
262 using feeder_type = feeder_impl<Body, Item>;
263 …using iteration_task_iterator_type = typename input_iteration_task_iterator_helper<Body, Item>::ty…
264 using iteration_task = for_each_iteration_task<iteration_task_iterator_type, Body, Item>;
267 … const Body& body, feeder_impl<Body, Item>* feeder_ptr, small_object_allocator& alloc)
322 template <typename Iterator, typename Body, typename Item>
326 using iteration_task = for_each_iteration_task<Iterator, Body, Item>;
330 const Body& body, feeder_impl<Body, Item>* feeder_ptr,
384 template <typename Iterator, typename Body, typename Item>
387 const Body& my_body;
388 feeder_impl<Body, Item>* my_feeder_ptr;
390 parallel_for_body_wrapper(Iterator first, const Body& body, feeder_impl<Body, Item>* feeder_ptr)
398 parallel_for_each_operator_selector<Body>::call(my_body, *(my_first + count),
451 template <typename Body, typename Iterator, typename Item>
452 using feeder_is_required = tbb::detail::void_t<decltype(tbb::detail::invoke(std::declval<const Body
457 template <typename Iterator, typename Body, typename Item, typename = void>
459 feeder_holder( wait_context&, task_group_context&, const Body& ) {}
461 feeder_impl<Body, Item>* feeder_ptr() { return nullptr; }
464 template <typename Iterator, typename Body, typename Item>
465 class feeder_holder<Iterator, Body, Item, feeder_is_required<Body, Iterator, Item>> {
467 feeder_holder( wait_context& w_context, task_group_context& context, const Body& body )
470 feeder_impl<Body, Item>* feeder_ptr() { return &my_feeder; }
472 feeder_impl<Body, Item> my_feeder;
475 template <typename Iterator, typename Body, typename Item>
478 …for_each_root_task_base(Iterator first, Iterator last, const Body& body, wait_context& w_context, …
494 const Body& my_body;
495 feeder_holder<Iterator, Body, Item> my_feeder_holder;
501 template <typename Iterator, typename Body, typename Item, typename IteratorTag = iterator_tag_disp…
502 class for_each_root_task : public for_each_root_task_base<Iterator, Body, Item>
504 using base_type = for_each_root_task_base<Iterator, Body, Item>;
509 using block_handling_type = input_block_handling_task<Body, Item>;
538 template <typename Iterator, typename Body, typename Item>
539 class for_each_root_task<Iterator, Body, Item, std::forward_iterator_tag>
540 : public for_each_root_task_base<Iterator, Body, Item>
542 using base_type = for_each_root_task_base<Iterator, Body, Item>;
547 using block_handling_type = forward_block_handling_task<Iterator, Body, Item>;
574 template <typename Iterator, typename Body, typename Item>
575 class for_each_root_task<Iterator, Body, Item, std::random_access_iterator_tag>
576 : public for_each_root_task_base<Iterator, Body, Item>
578 using base_type = for_each_root_task_base<Iterator, Body, Item>;
585 …parallel_for_body_wrapper<Iterator, Body, Item>(this->my_first, this->my_body, this->my_feeder_hol…
597 template<typename Body, typename Item, typename FeederArg>
598 auto feeder_argument_parser(void (Body::*)(Item, feeder<FeederArg>&) const) -> FeederArg;
600 template<typename Body, typename>
601 decltype(feeder_argument_parser<Body>(&Body::operator())) get_item_type_impl(int); // for (T, feede…
602 template<typename Body, typename Item> Item get_item_type_impl(...); // stub
604 template <typename Body, typename Item>
605 using get_item_type = decltype(get_item_type_impl<Body, Item>(0));
608 template <typename Body, typename ItemType>
609 using feeder_item_type = std::remove_cvref_t<get_item_type<Body, ItemType>>;
611 template <typename Body, typename Iterator>
613 …parallel_for_each_body<Body, iterator_reference_type<Iterator>, feeder_item_type<Body, iterator_re…
615 template <typename Body, typename Range>
617 …parallel_for_each_body<Body, range_reference_type<Range>, feeder_item_type<Body, range_reference_t…
622 template<typename Iterator, typename Body>
623 void run_parallel_for_each( Iterator first, Iterator last, const Body& body, task_group_context& co…
626 using ItemType = get_item_type<Body, typename std::iterator_traits<Iterator>::value_type>;
629 … for_each_root_task<Iterator, Body, ItemType> root_task(first, last, body, w_context, context);
659 template<typename Iterator, typename Body>
660 __TBB_requires(std::input_iterator<Iterator> && parallel_for_each_iterator_body<Body, Iterator>)
661 void parallel_for_each(Iterator first, Iterator last, const Body& body) {
663 run_parallel_for_each<Iterator, Body>(first, last, body, context);
666 template<typename Range, typename Body>
667 …tainer_based_sequence<Range, std::input_iterator_tag> && parallel_for_each_range_body<Body, Range>)
668 void parallel_for_each(Range& rng, const Body& body) {
672 template<typename Range, typename Body>
673 …tainer_based_sequence<Range, std::input_iterator_tag> && parallel_for_each_range_body<Body, Range>)
674 void parallel_for_each(const Range& rng, const Body& body) {
680 template<typename Iterator, typename Body>
681 __TBB_requires(std::input_iterator<Iterator> && parallel_for_each_iterator_body<Body, Iterator>)
682 void parallel_for_each(Iterator first, Iterator last, const Body& body, task_group_context& context…
683 run_parallel_for_each<Iterator, Body>(first, last, body, context);
686 template<typename Range, typename Body>
687 …tainer_based_sequence<Range, std::input_iterator_tag> && parallel_for_each_range_body<Body, Range>)
688 void parallel_for_each(Range& rng, const Body& body, task_group_context& context) {
692 template<typename Range, typename Body>
693 …tainer_based_sequence<Range, std::input_iterator_tag> && parallel_for_each_range_body<Body, Range>)
694 void parallel_for_each(const Range& rng, const Body& body, task_group_context& context) {