diff options
Diffstat (limited to 'example.c')
-rw-r--r-- | example.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/example.c b/example.c new file mode 100644 index 0000000..fb71718 --- /dev/null +++ b/example.c @@ -0,0 +1,72 @@ +#include <stdio.h> + +#include "optional.h" + +OPTIONALDEC(int); +OPTIONALDEC(float); + +struct mine { + OPTIONAL(int) a; + OPTIONAL(int) b; +}; + +OPTIONAL(int) +ithas(void) +{ + OPTIONAL(int) r = OPTSOME(10); + return r; +} + +OPTIONAL(int) +ithasnt(void) +{ + OPTIONAL(int) r = OPTNONE; + return r; +} + +void +optput(OPTIONAL(float) *dst, float src) +{ + opt_set_some(*dst, 6.9); +} + +int +main(int argc, const char *argv[]) +{ + int a, b; + struct mine mine = { + .a = OPTSOME(69), + .b = OPTNONE, + }; + OPTIONAL(float) y = OPTNONE; + OPTIONAL(float) z = OPTSOME(1.1); + float uy, uz, xy = opt_default(y, 6.9), xz = opt_default(z, 6.9); + float e = y.has ? y.data : 6.9; + float f = opt_default(y, 6.9); + + opt_set_some(mine.b, 10); + opt_set_none(mine.a); + + if (opt_unwrap(mine.a, a)) { + printf("has a = %d\n", a); + } else { + printf("doesn't have a\n"); + } + if (opt_unwrap(mine.b, b)) { + printf("has b = %d\n", b); + } else { + printf("doesn't have b\n"); + } + if (opt_unwrap(y, uy)) { + printf("has y = %f\n", uy); + } else { + printf("doesn't have y\n"); + } + if (opt_unwrap(z, uz)) { + printf("has z = %f\n", uz); + } else { + printf("doesn't have z\n"); + } + + printf("xy = %f, xz = %f\n", xy, xz); +} |