| 807 | |
| 808 | template <class ForwardIt, class UnaryPredicate> |
| 809 | sycl::event all_of(sycl::queue &q, |
| 810 | ForwardIt first, ForwardIt last, detail::early_exit_flag_t* out, |
| 811 | UnaryPredicate p, const std::vector<sycl::event>& deps = {}) { |
| 812 | std::size_t problem_size = std::distance(first, last); |
| 813 | if(problem_size == 0) |
| 814 | return sycl::event{}; |
| 815 | auto evt = detail::early_exit_for_each(q, problem_size, out, |
| 816 | [=](sycl::id<1> idx) -> bool { |
| 817 | auto it = first; |
| 818 | std::advance(it, idx[0]); |
| 819 | return !p(*it); |
| 820 | }, deps); |
| 821 | return q.single_task(evt, [=](){ |
| 822 | *out = static_cast<detail::early_exit_flag_t>(!(*out)); |
| 823 | }); |
| 824 | } |
| 825 | |
| 826 | template <class ForwardIt, class UnaryPredicate> |
| 827 | sycl::event any_of(sycl::queue &q, |