10 auto generator = tpf::chrono_random::random_generator<int>(0, 10);
12 std::vector<int> v; v.reserve(
count);
14 for(
size_t i = 0; i <
count; ++i)
15 v.emplace_back(generator());
18 std::atomic<bool> failed(
false);
20 std::transform(std::execution::par_unseq, v.begin(), v.end(), v.begin(),
21 [&generator, &failed](
auto& e)
27 rlt = tpf::safe_type::safe_div(e, generator());
30 catch(std::exception&)
44template<
typename Policy,
typename IteratorBegin,
typename IteratorEnd,
typename Callback>
45bool my_for_each(Policy&& policy, IteratorBegin&& begin, IteratorEnd&& end, Callback&& callback)
47 std::atomic<bool> operation_result{
true};
49 std::for_each(std::forward<Policy>(policy),
50 std::forward<IteratorBegin>(begin),
51 std::forward<IteratorEnd>(end),
52 [&callback, &operation_result](
auto&& e)
56 callback(std::forward<
decltype(e)>(e));
60 operation_result =
false;
64 return operation_result;
72 auto generator = tpf::chrono_random::random_generator<int>(0, 10);
74 std::vector<int> v; v.reserve(
count);
76 for(
size_t i = 0; i <
count; ++i)
77 v.emplace_back(generator());
83 my_for_each(std::execution::par_unseq, v.begin(), v.end(),
86 e = tpf::safe_type::safe_div(e, generator());
99template<
typename Policy,
typename IteratorBegin,
typename IteratorEnd,
typename Callback>
100void safe_for_each(Policy&& policy, IteratorBegin&& begin, IteratorEnd&& end, Callback&& callback)
102 std::exception_ptr exception_ptr{
nullptr};
104 std::for_each(std::forward<Policy>(policy),
105 std::forward<IteratorBegin>(begin),
106 std::forward<IteratorEnd>(end),
107 [&callback, &exception_ptr](
auto&& e)
111 callback(std::forward<
decltype(e)>(e));
115 exception_ptr = std::current_exception();
119 if(exception_ptr) std::rethrow_exception(exception_ptr);
122template<
typename Policy,
typename IteratorBegin,
typename IteratorEnd,
typename Callback>
123void go_parallel(Policy&& policy, IteratorBegin&& begin, IteratorEnd&& end, Callback&& callback)
125 std::exception_ptr exception_ptr{
nullptr};
127 std::for_each(std::forward<Policy>(policy),
128 std::forward<IteratorBegin>(begin),
129 std::forward<IteratorEnd>(end),
130 [&callback, &exception_ptr](
auto&& e)
134 callback(std::forward<
decltype(e)>(e));
138 exception_ptr = std::current_exception();
142 if(exception_ptr) std::rethrow_exception(exception_ptr);
149 auto generator = tpf::chrono_random::random_generator<int>(0, 10);
151 std::vector<int> v; v.reserve(
count);
153 for(
size_t i = 0; i <
count; ++i)
154 v.emplace_back(generator());
161 [&generator](
auto& e)
163 e = tpf::safe_type::safe_div(e, generator());
168 catch(
const std::exception& e)
170 stream <<
"---- Operation Failed with Exception ----" <<
endl;
180 auto generator = tpf::chrono_random::random_generator<int>(0, 10);
182 std::vector<int> v; v.reserve(
count);
184 for(
size_t i = 0; i <
count; ++i)
185 v.emplace_back(generator());
189 auto callback = [&generator](
auto& e)
194 Tpf_GoParallel(success, std::for_each, callback,
195 std::execution::par_unseq, v.begin(), v.end());
211 auto generator = tpf::chrono_random::random_generator<int>(0, 10);
213 std::vector<int> v; v.reserve(
count);
215 for(
size_t i = 0; i <
count; ++i)
216 v.emplace_back(generator());
220 auto find_value = v.back();
222 auto callback = [&find_value](
auto& e)
224 return find_value == e;
227 Tpf_GoParallel_Return(success, itr, std::find_if, callback,
228 std::execution::par_unseq, v.begin(), v.end());
245 auto generator = tpf::chrono_random::random_generator<int>(0, 10);
247 std::vector<int> v; v.reserve(
count);
249 for(
size_t i = 0; i <
count; ++i)
250 v.emplace_back(generator());
254 auto callback = [&generator](
auto& e)
261 Tpf_GoParallel_Throw(std::for_each, callback,
262 std::execution::par_unseq, v.begin(), v.end());
266 catch(
const std::exception& e)
void safe_for_each(Policy &&policy, IteratorBegin &&begin, IteratorEnd &&end, Callback &&callback)
void safe_parallel_algorithm_throw()
void safe_parallel_algorithm_bool()
void safe_serial_algorithm()
void go_parallel(Policy &&policy, IteratorBegin &&begin, IteratorEnd &&end, Callback &&callback)
void safe_parallel_algorithm()
bool my_for_each(Policy &&policy, IteratorBegin &&begin, IteratorEnd &&end, Callback &&callback)
void safe_parallel_algorithm_return()
types::enable_if_integral_t< Type > safe_div(Type a, Type b)
Safe division of integral types.