Fiber creation.
#include <cstdio>
static void print(char const* something)
{
printf("%s\n", something);
}
static void print_something()
{
}
static int inc(int i)
{
int res = i + 1;
printf("inc(%d) = %d\n", i, res);
return res;
}
static void add(int& a, int x, int y)
{
a = x + y;
printf("%d = %d + %d\n", a, x, y);
}
struct Data {
double operand;
double result;
};
static Data* struct_add(Data* a, double b)
{
a->result = a->operand + b;
printf("a->operand + b = %g\n", a->result);
return a;
}
{
printf("100 incremented is %d\n", *finc);
int a = 0;
*f_add;
printf("Result of add is %d\n", a);
Data data = {3.5};
printf(
"Result of struct_add is %g\n",
zth::fiber(struct_add, &data, 2.5)->result);
#if __cplusplus >= 201103L
zth::fiber([](
char const* msg) { printf(
"Lambda says: %s\n", msg); },
"Hello from lambda!");
struct Functor {
void operator()(int n)
{
printf("Functor called with %d\n", n);
}
};
std::function<void()> f = []() { printf("std::function called\n"); };
auto fiber_object =
zth::fiber([]() {
return 42; });
#endif
#if __cplusplus >= 201703L
[](Data& a, double d) {
a.result = a.operand + d;
return a;
},
data, 1.0);
printf("Structured binding: data_result = %g\n", data_result);
#endif
return 0;
}
int main_fiber(int argc, char **argv)
fiber_type< F >::fiber fiber(F &&f, Args &&... args)
Create and start a new fiber.
fiber_future(F &) -> fiber_future< typename F::factory::Return >
Forces the fiber to have a future that outlives the fiber.
The future returned by a fiber.