From 238b309af9310dc7508696df0513c1a5036aea49 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 31 Mar 2022 20:54:35 -0700 Subject: loop: add summing, maximizing, while, until. --- cppawk-include/iter.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'cppawk-include') diff --git a/cppawk-include/iter.h b/cppawk-include/iter.h index 8b6a3ce..4abbdce 100644 --- a/cppawk-include/iter.h +++ b/cppawk-include/iter.h @@ -153,6 +153,37 @@ #define __fini_collect(var, expr) var = list_end(var) #define __step_collect(var, expr) 1 +#define __init_summing(var, expr) var = 0 +#define __test_summing(var, expr) 1 +#define __prep_summing(var, expr) var += (expr) +#define __fini_summing(var, expr) 1 +#define __step_summing(var, expr) 1 + +function __loop_max(a, b) +{ + return a > b ? a : b +} + +#define __init_maximizing(var, expr) var = nil +#define __test_maximizing(var, expr) 1 +#define __prep_maximizing(var, expr) var = (null(var) \ + ? expr \ + : __loop_max(var, expr)) +#define __fini_maximizing(var, expr) 1 +#define __step_maximizing(var, expr) 1 + +#define __init_while(expr) 1 +#define __test_while(expr) expr +#define __prep_while(expr) 1 +#define __fini_while(expr) 1 +#define __step_while(expr) 1 + +#define __init_until(expr) 1 +#define __test_until(expr) !(expr) +#define __prep_until(expr) 1 +#define __fini_until(expr) 1 +#define __step_until(expr) 1 + #define __init_lockstep(...) prog(__varexpand3(__init_first, __init_next, \ __VA_ARGS__)) #define __test_lockstep(...) __and(__varexpand3(__test_first, __test_next, \ -- cgit v1.2.3