#include #include #include #include #include constexpr long n = 10; template constexpr auto _ = pfor::ctv; #define OPERAND(T, ID) \ T ID##_; \ auto ID = pfor::Operand{ID##_} template void printArray(std::array const& array) { std::copy(std::begin(array), std::end(array), std::ostream_iterator(std::cout, " ")); std::cout << std::endl; } inline static long long factorial(long long n) { long long r = 1; while(n > 1) r *= n--; return r; } std::size_t pfor::ParallelForParameters::nThreads = 4; int main() { using Type = std::array; OPERAND(Type, a); OPERAND(Type, b); OPERAND(Type, c); OPERAND(Type, d); std::generate_n(std::begin(a_), n, [i=0]() mutable { return i++; }); std::generate_n(std::begin(b_), n, [i=0]() mutable { return n-i++; }); std::generate_n(std::begin(c_), n, [i=0]() mutable { return i++%3; }); std::generate_n(std::begin(d_), n, [i=0]() mutable { return -i++; }); pfor::Index i; auto add3 = pfor::makeOperator([](auto a, auto b, auto c) { return a+b+c; }); auto pow = pfor::makeOperator(std::pow); auto factorial = pfor::makeOperator(::factorial); pfor::parallelFor(pfor::Range{0, n}, a[i] = add3(a[i], c[i], c[i]), b[i] = pow(b[i], c[i]), d[i] = pow(factorial(-d[i]/2), xpr(i) % 4 + 1) ); printArray(a_); printArray(b_); printArray(c_); printArray(d_); }