alsk/examples/basic_edsl.cpp

29 lines
818 B
C++

#include <alsk/alsk.h>
#include <algorithm>
struct Gen {
int value;
int operator()() { return value++; }
};
int transform(int v, std::mt19937& rng) {
std::uniform_int_distribution<int> d(-3, 3);
return v + d(rng);
}
int main() {
auto gen = alsk::edsl::makeOperand<int(), Gen>();
auto transform = alsk::edsl::makeOperand<int(alsk::arg::R<0>, alsk::arg::RNG), FN(::transform)>();
auto selectMin = alsk::edsl::makeOperand<int(int, int), Fn<int const&(&)(int const&, int const&), std::min<int>>>();
constexpr auto body = (10*alsk::edsl::link<alsk::arg::R<1>()>(gen, transform)) ->* selectMin;
auto algo = alsk::edsl::implement<alsk::exec::StaticPool>(body);
algo.skeleton.task.task<0>() = Gen{5};
algo.executor.repeatability.upTo(8);
algo.executor.cores = 8;
auto r = algo();
std::printf("%d\n", r);
}