// Copyright 2009-2020 Intel Corporation // SPDX-License-Identifier: Apache-2.0 #pragma once #include #include "parallel_reduce.h" namespace embree { template __forceinline bool parallel_any_of (Index first, Index last, UnaryPredicate pred) { bool ret = false; #if defined(TASKING_TBB) #if TBB_INTERFACE_VERSION >= 12002 tbb::task_group_context context; tbb::parallel_for(tbb::blocked_range{first, last}, [&ret,pred,&context](const tbb::blocked_range& r) { if (context.is_group_execution_cancelled()) return; for (size_t i = r.begin(); i != r.end(); ++i) { if (pred(i)) { ret = true; context.cancel_group_execution(); } } }); #else tbb::parallel_for(tbb::blocked_range{first, last}, [&ret,pred](const tbb::blocked_range& r) { if (tbb::task::self().is_cancelled()) return; for (size_t i = r.begin(); i != r.end(); ++i) { if (pred(i)) { ret = true; tbb::task::self().cancel_group_execution(); } } }); #endif #else ret = parallel_reduce (first, last, false, [pred](const range& r)->bool { bool localret = false; for (auto i=r.begin(); i() ); #endif return ret; } } // end namespace