#ifndef ALSK_CELERO_BONE_COMMON_H #define ALSK_CELERO_BONE_COMMON_H #include #include #include #include #include namespace bench { using Data = std::vector; using Value = Data::value_type; struct Task { std::size_t size; Data operator()(int min, int max) const; // TODO inline version: improve benchmarking for skeleton? // Data operator()(int min, int max) const { // Data v(size); // std::generate_n(std::begin(v), size, [&, i=0]() mutable { return (++i)%(max-min+1) + min; }); // return v; // }; }; constexpr auto eTask = alsk::edsl::makeOperand(); constexpr auto eTaskStdFun = alsk::edsl::makeOperand>(); template void taskV() { std::vector v(count); std::generate_n(std::begin(v), count, [i=0]() mutable { return i++; }); for(std::size_t i = 0; i < count; ++i) celero::DoNotOptimizeAway(std::accumulate(begin(v), end(v), i)); } template constexpr auto eTaskV = alsk::edsl::makeOperand)>(); template constexpr auto eTaskVStdFun = alsk::edsl::makeOperand>(); Data taskD(Data const&); constexpr auto eTaskD = alsk::edsl::makeOperand(); constexpr auto eTaskDStdFun = alsk::edsl::makeOperand>(); Data const& select(Data const&, Data const&); constexpr auto eSelect = alsk::edsl::makeOperand(); constexpr auto eSelectStdFun = alsk::edsl::makeOperand>(); Value project(Data const&, Value const&); constexpr auto eProject = alsk::edsl::makeOperand(); constexpr auto eProjectStdFun = alsk::edsl::makeOperand>(); } #endif