diff options
| author | Tyge Løvset <[email protected]> | 2022-11-27 22:57:00 +0100 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2022-11-27 22:57:00 +0100 |
| commit | 1e0f229b0b044f6df0d0084674f3cf0dc4f4d31d (patch) | |
| tree | f07039594558b948be69636b16d85a770ba973f0 | |
| parent | d540332f52fbd9b2c50a402525a5cfca4919ec32 (diff) | |
| download | STC-modified-1e0f229b0b044f6df0d0084674f3cf0dc4f4d31d.tar.gz STC-modified-1e0f229b0b044f6df0d0084674f3cf0dc4f4d31d.zip | |
Moved c_forfilter macros from ccommon.h to views.h
| -rw-r--r-- | examples/forloops.c | 1 | ||||
| -rw-r--r-- | include/stc/ccommon.h | 21 | ||||
| -rw-r--r-- | include/stc/views.h | 22 |
3 files changed, 23 insertions, 21 deletions
diff --git a/examples/forloops.c b/examples/forloops.c index d016cb66..2654f095 100644 --- a/examples/forloops.c +++ b/examples/forloops.c @@ -1,4 +1,5 @@ #include <stdio.h>
+#include <stc/views.h>
#define i_type IVec
#define i_val int
diff --git a/include/stc/ccommon.h b/include/stc/ccommon.h index f2d21099..0777d0ce 100644 --- a/include/stc/ccommon.h +++ b/include/stc/ccommon.h @@ -167,27 +167,6 @@ STC_INLINE char* cstrnstrn(const char *str, const char *needle, for (C##_iter it = start, *_endref = (C##_iter*)(finish).ref \ ; it.ref != (C##_value*)_endref; C##_next(&it)) -#ifndef c_FLT_STACK - #define c_FLT_STACK 14 /* 22, 30, .. */ -#endif -#define c_flt_take(i, n) (++(i).s1[(i).s1top++] <= (n)) -#define c_flt_skip(i, n) (++(i).s1[(i).s1top++] > (n)) -#define c_flt_skipwhile(i, pred) ((i).s2[(i).s2top++] |= !(pred)) -#define c_flt_takewhile(i, pred) !c_flt_skipwhile(i, pred) - -#define c_forfilter(...) c_MACRO_OVERLOAD(c_forfilter, __VA_ARGS__) -#define c_forfilter4(i, C, cnt, filter) \ - c_forfilter_s(i, C, C##_begin(&cnt), filter) -#define c_forfilter5(i, C, cnt, filter, cond) \ - c_forfilter_s(i, C, C##_begin(&cnt), filter) if (!(cond)) break; else -#define c_forfilter_s(i, C, start, filter) \ - for (struct {C##_iter it; C##_value *ref; \ - uint32_t s1[c_FLT_STACK], index, count; \ - bool s2[c_FLT_STACK]; uint8_t s1top, s2top;} \ - i = {.it=start, .ref=i.it.ref}; i.it.ref \ - ; C##_next(&i.it), i.ref = i.it.ref, ++i.index, i.s1top=0, i.s2top=0) \ - if (!((filter) && ++i.count)) ; else - #define c_forwhile(i, C, start, cond) \ for (struct {C##_iter it; C##_value *ref; size_t index;} \ i = {.it=start, .ref=i.it.ref}; i.it.ref && (cond) \ diff --git a/include/stc/views.h b/include/stc/views.h index d8193c05..8f7a0d78 100644 --- a/include/stc/views.h +++ b/include/stc/views.h @@ -63,6 +63,28 @@ int main() #include <stc/ccommon.h> +#ifndef c_FLT_STACK + #define c_FLT_STACK 14 /* 22, 30, .. */ +#endif +#define c_flt_take(i, n) (++(i).s1[(i).s1top++] <= (n)) +#define c_flt_skip(i, n) (++(i).s1[(i).s1top++] > (n)) +#define c_flt_skipwhile(i, pred) ((i).s2[(i).s2top++] |= !(pred)) +#define c_flt_takewhile(i, pred) !c_flt_skipwhile(i, pred) + +#define c_forfilter(...) c_MACRO_OVERLOAD(c_forfilter, __VA_ARGS__) +#define c_forfilter4(i, C, cnt, filter) \ + c_forfilter_s(i, C, C##_begin(&cnt), filter) +#define c_forfilter5(i, C, cnt, filter, cond) \ + c_forfilter_s(i, C, C##_begin(&cnt), filter) if (!(cond)) break; else +#define c_forfilter_s(i, C, start, filter) \ + for (struct {C##_iter it; C##_value *ref; \ + uint32_t s1[c_FLT_STACK], index, count; \ + bool s2[c_FLT_STACK]; uint8_t s1top, s2top;} \ + i = {.it=start, .ref=i.it.ref}; i.it.ref \ + ; C##_next(&i.it), i.ref = i.it.ref, ++i.index, i.s1top=0, i.s2top=0) \ + if (!((filter) && ++i.count)) ; else + + // clview type #define clview_literal(C, ...) \ |
