aboutsummaryrefslogtreecommitdiffstats
path: root/cppawk-include
diff options
context:
space:
mode:
Diffstat (limited to 'cppawk-include')
-rw-r--r--cppawk-include/iter.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/cppawk-include/iter.h b/cppawk-include/iter.h
index 5151f9f..77163de 100644
--- a/cppawk-include/iter.h
+++ b/cppawk-include/iter.h
@@ -172,6 +172,53 @@ function __loop_max(a, b)
#define __fini_maximizing(var, expr) 1
#define __step_maximizing(var, expr) 1
+function __loop_min(a, b)
+{
+ return a > b ? b : a
+}
+
+#define __init_minimizing(var, expr) var = nil
+#define __test_minimizing(var, expr) 1
+#define __prep_minimizing(var, expr) var = (null(var) \
+ ? expr \
+ : __loop_min(var, expr))
+#define __fini_minimizing(var, expr) 1
+#define __step_minimizing(var, expr) 1
+
+function __loop_argmax(a, arga, b, argb)
+{
+ return a > b ? arga : argb;
+}
+
+#define __init_argmax(amx, arg, expr) (__g(mx) = 0) || (amx = 0)
+#define __test_argmax(amx, arg, expr) 1
+#define __prep_argmax(amx, arg, expr) ((__g(om) = __g(mx)) || 1) && \
+ ((__g(mx) = \
+ (null(__g(mx)) \
+ ? expr \
+ : __loop_max(__g(mx), \
+ expr))) || 1) && \
+ ((__g(om) != __g(mx)) ? amx = arg : 1)
+#define __fini_argmax(amx, arg, expr) 1
+#define __step_argmax(amx, arg, expr) 1
+
+function __loop_argmin(a, arga, b, argb)
+{
+ return a < b ? arga : argb;
+}
+
+#define __init_argmin(ami, arg, expr) (__g(mi) = 0) || (ami = 0)
+#define __test_argmin(ami, arg, expr) 1
+#define __prep_argmin(ami, arg, expr) ((__g(om) = __g(mi)) || 1) && \
+ ((__g(mi) = \
+ (null(__g(mi)) \
+ ? expr \
+ : __loop_min(__g(mi), \
+ expr))) || 1) && \
+ ((__g(om) != __g(mi)) ? ami = arg : 1)
+#define __fini_argmin(ami, arg, expr) 1
+#define __step_argmin(ami, arg, expr) 1
+
#define __init_while(expr) 1
#define __test_while(expr) expr
#define __prep_while(expr) 1