#ifdef USE_TBB
#include <tbb/parallel_for.h>
#endif //USE_TBB
#include <iostream>
namespace serial {
template<typename Count, typename UnaryFunc>
void numeric_for(Count first, Count last, UnaryFunc f) {
while(first!=last) {
f(first);
++first;
}
}
}
namespace compat {
template<typename Count, typename UnaryFunc>
void numeric_for(Count first, Count last, UnaryFunc f) {
#ifdef USE_TBB
tbb::parallel_for(first, last, f);
#else
serial::numeric_for(first, last, f);
#endif
}
}
int main() {
compat::numeric_for(
1,
30,
[](int i){ std::cout << i << '\t'; }
);
}
I2lmZGVmIFVTRV9UQkIKICAgICNpbmNsdWRlIDx0YmIvcGFyYWxsZWxfZm9yLmg+CiNlbmRpZiAvL1VTRV9UQkIKCiNpbmNsdWRlIDxpb3N0cmVhbT4KCm5hbWVzcGFjZSBzZXJpYWwgewogICAgdGVtcGxhdGU8dHlwZW5hbWUgQ291bnQsIHR5cGVuYW1lIFVuYXJ5RnVuYz4KICAgIHZvaWQgbnVtZXJpY19mb3IoQ291bnQgZmlyc3QsIENvdW50IGxhc3QsIFVuYXJ5RnVuYyBmKSB7CiAgICAgICAgd2hpbGUoZmlyc3QhPWxhc3QpIHsKICAgICAgICAgICAgZihmaXJzdCk7CiAgICAgICAgICAgICsrZmlyc3Q7CiAgICAgICAgfQogICAgfQp9CgpuYW1lc3BhY2UgY29tcGF0IHsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvdW50LCB0eXBlbmFtZSBVbmFyeUZ1bmM+CiAgICB2b2lkIG51bWVyaWNfZm9yKENvdW50IGZpcnN0LCBDb3VudCBsYXN0LCBVbmFyeUZ1bmMgZikgewogICAgI2lmZGVmIFVTRV9UQkIKICAgICAgICB0YmI6OnBhcmFsbGVsX2ZvcihmaXJzdCwgbGFzdCwgZik7CiAgICAjZWxzZQogICAgICAgIHNlcmlhbDo6bnVtZXJpY19mb3IoZmlyc3QsIGxhc3QsIGYpOwogICAgI2VuZGlmCiAgICB9Cn0KCmludCBtYWluKCkgewogICAgY29tcGF0OjpudW1lcmljX2ZvcigKICAgICAgICAxLAogICAgICAgIDMwLAogICAgICAgIFtdKGludCBpKXsgc3RkOjpjb3V0IDw8IGkgPDwgJ1x0JzsgfQogICAgKTsKfQ==