diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-04-03 12:49:51 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-04-03 12:49:51 -0700 |
commit | f40b4fb9823af7797ad5fdef0259772b1179d5c5 (patch) | |
tree | b7ce5e96fa12f9516657acc8280909733d9757de /cppawk-include/iter.h | |
parent | ab409383337440bd12f9ce12e512572b2b19170e (diff) | |
download | cppawk-f40b4fb9823af7797ad5fdef0259772b1179d5c5.tar.gz cppawk-f40b4fb9823af7797ad5fdef0259772b1179d5c5.tar.bz2 cppawk-f40b4fb9823af7797ad5fdef0259772b1179d5c5.zip |
iter: split off some macros into iter-priv.
Use only iter-priv.h in cons.h. Use cons-priv.h in iter.h.
Diffstat (limited to 'cppawk-include/iter.h')
-rw-r--r-- | cppawk-include/iter.h | 68 |
1 files changed, 36 insertions, 32 deletions
diff --git a/cppawk-include/iter.h b/cppawk-include/iter.h index 1cc3c7b..99795f3 100644 --- a/cppawk-include/iter.h +++ b/cppawk-include/iter.h @@ -28,6 +28,10 @@ #ifndef __CPPAWK_ITER_H #define __CPPAWK_ITER_H +#ifndef __CPPAWK_ITER_PRIV_H +#include "iter-priv.h" +#endif + #ifndef __CPPAWK_BASE_H #include "base.h" #endif @@ -36,24 +40,14 @@ #include "narg-priv.h" #endif -#define doarray(key, value, arr) \ - for (key in arr) \ - if ((value = arr[key]) || 1) - -#define dostring(index, chr, str) \ - __g(s) = str; \ - __g(l) = length(__g(s)); \ - for (index = 1; index <= __g(l); i++) \ - if ((chr = substr(__g(s), index, 1)) || 1) - -#define dofields(index, val) \ - for (index = 1; index <= NF; index++) \ - if ((val = $ index) || 1) - -#ifndef __CPPAWK_CONS_H -#include "cons.h" +#ifndef __CPPAWK_CONS_PRIV_H +#include "cons-priv.h" #endif +#define doarray(key, value, arr) __doarray(key, value, arr) +#define dostring(index, chr, str) __dostring(index, chr, str) +#define dofields(index, val) __dofields(index, val) + #define loop(...) for (__loop_init(__VA_ARGS__); \ (__loop_test(__VA_ARGS__) || \ __loop_fini(__VA_ARGS__)) && \ @@ -137,11 +131,16 @@ #define for_var(var, expr) first_then(var, expr, expr) +#define __init_list(iter, var, list) iter = (list) +#define __test_list(iter, var, list) !__endp(iter) +#define __prep_list(iter, var, list) var = __car(iter) +#define __fini_list(iter, var, list) 0 +#define __step_list(iter, var, list) iter = __cdr(iter) #define __init___list(iter, var, list) iter = (list) -#define __test___list(iter, var, list) !endp(iter) -#define __prep___list(iter, var, list) var = car(iter) +#define __test___list(iter, var, list) !__endp(iter) +#define __prep___list(iter, var, list) var = __car(iter) #define __fini___list(iter, var, list) 0 -#define __step___list(iter, var, list) iter = cdr(iter) +#define __step___list(iter, var, list) iter = __cdr(iter) #define __init_fields(var) __g(var) = 1 #define __test_fields(var) __g(var) <= NF @@ -149,22 +148,27 @@ #define __fini_fields(var) 1 #define __step_fields(var) __g(var)++ -#define __init___keys(key, array) __g(key) = keys(array) +#define __init_keys(key, array) __g(key) = __keys(array) +#define __test_keys(key, array) !endp(__g(key)) +#define __prep_keys(key, array) key = __car(__g(key)) +#define __fini_keys(key, array) 1 +#define __step_keys(key, array) __g(key) = __cdr(__g(key)) +#define __init___keys(key, array) __g(key) = __keys(array) #define __test___keys(key, array) !endp(__g(key)) -#define __prep___keys(key, array) key = car(__g(key)) +#define __prep___keys(key, array) key = __car(__g(key)) #define __fini___keys(key, array) 1 -#define __step___keys(key, array) __g(key) = cdr(__g(key)) +#define __step___keys(key, array) __g(key) = __cdr(__g(key)) -#define __init_collect(var, expr) var = list_begin() +#define __init_collect(var, expr) var = __list_begin() #define __test_collect(var, expr) 1 -#define __prep_collect(var, expr) var = list_add(var, expr) -#define __fini_collect(var, expr) var = list_end(var) +#define __prep_collect(var, expr) var = __list_add(var, expr) +#define __fini_collect(var, expr) var = __list_end(var) #define __step_collect(var, expr) 1 -#define __init_collect_plus(var, expr) var = list_begin() +#define __init_collect_plus(var, expr) var = __list_begin() #define __test_collect_plus(var, expr) 1 -#define __prep_collect_plus(var, expr) var = list_add(var, expr) -#define __fini_collect_plus(var, expr) var = list_end(list_add(var, expr)) +#define __prep_collect_plus(var, expr) var = __list_add(var, expr) +#define __fini_collect_plus(var, expr) var = __list_end(__list_add(var, expr)) #define __step_collect_plus(var, expr) 1 #define __init_summing(var, expr) var = 0 @@ -180,7 +184,7 @@ function __loop_max(a, b) #define __init_maximizing(var, expr) var = nil #define __test_maximizing(var, expr) 1 -#define __prep_maximizing(var, expr) var = (null(var) \ +#define __prep_maximizing(var, expr) var = (__null(var) \ ? expr \ : __loop_max(var, expr)) #define __fini_maximizing(var, expr) 1 @@ -193,7 +197,7 @@ function __loop_min(a, b) #define __init_minimizing(var, expr) var = nil #define __test_minimizing(var, expr) 1 -#define __prep_minimizing(var, expr) var = (null(var) \ +#define __prep_minimizing(var, expr) var = (__null(var) \ ? expr \ : __loop_min(var, expr)) #define __fini_minimizing(var, expr) 1 @@ -208,7 +212,7 @@ function __loop_argmax(a, arga, b, argb) #define __test_argmax(amx, arg, expr) 1 #define __prep_argmax(amx, arg, expr) ((__g(om) = __g(mx)) || 1) && \ ((__g(mx) = \ - (null(__g(mx)) \ + (__null(__g(mx)) \ ? expr \ : __loop_max(__g(mx), \ expr))) || 1) && \ @@ -225,7 +229,7 @@ function __loop_argmin(a, arga, b, argb) #define __test_argmin(ami, arg, expr) 1 #define __prep_argmin(ami, arg, expr) ((__g(om) = __g(mi)) || 1) && \ ((__g(mi) = \ - (null(__g(mi)) \ + (__null(__g(mi)) \ ? expr \ : __loop_min(__g(mi), \ expr))) || 1) && \ |