alsk/examples/serial_itersel.cpp

27 lines
699 B
C++

#include <alsk/alsk.h>
int produce(int a, int b) {
return rand()%(a|b);
}
using namespace alsk;
using namespace alsk::arg;
constexpr auto add = edsl::link<int(P<0>, P<1>), std::plus<int>>();
constexpr auto mul = edsl::link<int(R<1>, P<2>), std::multiplies<int>>();
constexpr auto min = edsl::link<int(int, int), Fn<int const&(&)(int const&, int const&), std::min<int>>>();
constexpr auto prod = edsl::link<int(int, P<1>), FN(produce)>();
using Skel = decltype(getSkeleton(
edsl::link<R<2>(int, int, int)>(
add &
edsl::link<int(R<0>, P<1>)>(seq(3 * prod) ->* min) &
mul
)
));
int main() {
auto task = alsk::implement<exec::Sequential, Skel>();
std::printf("%d\n", task(10, 20, 5));
}