summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2022-09-24 08:48:22 +0200
committerTyge Løvset <[email protected]>2022-09-24 08:48:22 +0200
commit26bc208248a0dd0f303d5b80bd298f5100b56e82 (patch)
tree52a78515c40daea971103c1d605323a2563ee3ed
parentb6f75794b2fee2d65f886e84c399d1b8927ff04a (diff)
downloadSTC-modified-26bc208248a0dd0f303d5b80bd298f5100b56e82.tar.gz
STC-modified-26bc208248a0dd0f303d5b80bd298f5100b56e82.zip
Removed deprecated c_forarray, c_autovar, c_autoscope, c_autodefer.
Finalized and improved loops.
-rw-r--r--examples/forfilter.c5
-rw-r--r--include/stc/ccommon.h50
-rw-r--r--include/stc/cmap.h2
3 files changed, 20 insertions, 37 deletions
diff --git a/examples/forfilter.c b/examples/forfilter.c
index 955596cd..46e59562 100644
--- a/examples/forfilter.c
+++ b/examples/forfilter.c
@@ -31,9 +31,10 @@ void demo1(void)
&& flt_even(i)
&& flt_remove(i, 80)
//&& c_flt_take(i, 5)
- , c_flt_taketotal(i, 5)) {
+ , c_flt_take(i, 5)
+ ){
sum += res = trf_square(i);
- printf(" %d", res);
+ printf(" %d:%d", *i.ref, res);
}
printf("\nsum: %d\n", sum);
}
diff --git a/include/stc/ccommon.h b/include/stc/ccommon.h
index c368fdf9..f70bfcf4 100644
--- a/include/stc/ccommon.h
+++ b/include/stc/ccommon.h
@@ -170,30 +170,34 @@ STC_INLINE char* c_strnstrn(const char *s, const char *needle,
for (C##_iter it = start, *_endref = (C##_iter*)(finish).ref \
; it.ref != (C##_value*)_endref; C##_next(&it))
-#define c_FLT_STACK 5
+#ifndef c_FLT_STACK
+#define c_FLT_STACK 4
+#endif
#define c_flt_drop(i, n) (++(i).dropped[(i).dn++] > (n))
#define c_flt_dropwhile(i, pred) ((i).dropwhile |= !(pred))
#define c_flt_take(i, n) (++(i).taken[(i).tn++] <= (n))
-#define c_flt_taketotal(i, n) ((i).total < (n))
#define c_forfilter(...) c_MACRO_OVERLOAD(c_forfilter, __VA_ARGS__)
#define c_forfilter4(it, C, cnt, filter) \
- c_forfilter5(it, C, cnt, filter, true)
-#define c_forfilter5(it, C, cnt, filter, cond) \
- c_forfilter_s(it, C, C##_begin(&cnt), filter, cond)
-#define c_forfilter_s(it, C, start, filter, cond) \
- c_forwhile_s(it, C, start, cond) if (!((filter) && ++it.total)) ; else
+ c_forfilter_s(it, C, C##_begin(&cnt), filter)
+#define c_forfilter5(it, C, cnt, filter, loopwhile) \
+ c_forfilter_s(it, C, C##_begin(&cnt), filter) if (!(loopwhile)) break; else
+#define c_forfilter_s(it, C, start, filter) \
+ c_foreach_s(it, C, start) if (!(filter)) ; else
-#define c_forwhile(i, C, cnt, cond) \
- c_forwhile_s(i, C, C##_begin(&cnt), cond)
-#define c_forwhile_s(i, C, start, cond) \
+#define c_foreach_s(i, C, start) \
for (struct {C##_iter it; const C##_value *ref; \
- uint32_t index, total, taken[c_FLT_STACK], dropped[c_FLT_STACK]; \
+ uint32_t index, taken[c_FLT_STACK+1], dropped[c_FLT_STACK]; \
int8_t dn, tn; bool dropwhile;} \
- i = {.it=start, .ref=i.it.ref}; i.ref && (cond) \
+ i = {.it=start, .ref=i.it.ref}; i.ref \
; C##_next(&i.it), i.ref = i.it.ref, ++i.index, i.dn=0, i.tn=0)
+#define c_forwhile(i, C, cnt, cond) \
+ for (struct {C##_iter it; const C##_value *ref; size_t index;} \
+ i = {.it=C##_begin(&cnt), .ref=i.it.ref}; i.ref && (cond) \
+ ; C##_next(&i.it), i.ref = i.it.ref, ++i.index)
+
#define c_forpair(key, val, C, cnt) /* structured binding */ \
for (struct {C##_iter _it; const C##_key* key; C##_mapped* val;} _ = {C##_begin(&cnt)} \
; _._it.ref && (_.key = &_._it.ref->first, _.val = &_._it.ref->second) \
@@ -209,34 +213,12 @@ STC_INLINE char* c_strnstrn(const char *s, const char *needle,
for (itype i=start, _inc=step, _end=(stop) - (0 < _inc) \
; (i <= _end) == (0 < _inc); i += _inc)
-#define c_forloop(...) c_MACRO_OVERLOAD(c_forloop, __VA_ARGS__)
-#define c_forloop1(stop) c_forloop4(_c_i, size_t, 0, stop)
-#define c_forloop2(i, stop) c_forloop4(i, size_t, 0, stop)
-#define c_forloop3(i, itype, stop) c_forloop4(i, itype, 0, stop)
-#define c_forloop4(i, itype, start, stop) \
- for (struct {itype val, _end, *ref;} \
- i = {.val=start, ._end=stop, .ref=&i.val} \
- ; i.val < i._end; ++i.val)
-#define c_forloop5(i, itype, start, stop, step) \
- for (struct {itype val, _inc, _end, *ref;} \
- i = {.val=start, ._inc=step, ._end=(stop) - (0 < i._inc), .ref=&i.val} \
- ; (i.val > i._end) ^ (i._inc > 0); i.val += i._inc)
-
#define c_forlist(it, T, ...) \
for (struct {T* data; T* ref; size_t index;} \
it = {.data=(T[])__VA_ARGS__, .ref=it.data} \
; it.ref != &it.data[c_arraylen(((T[])__VA_ARGS__))] \
; ++it.ref, ++it.index)
-// [deprecated] - replaced by c_forlist():
-#define c_forarray(T, v, ...) \
- for (T _a[] = __VA_ARGS__, *v = _a; v != _a + c_arraylen(_a); ++v)
-#define c_forarray_p(T, v, ...) \
- for (T _a[] = __VA_ARGS__, **v = _a; v != _a + c_arraylen(_a); ++v)
-#define c_autovar c_with // [deprecated]
-#define c_autoscope c_scope // [deprecated]
-#define c_autodefer c_defer // [deprecated]
-
#define c_with(...) c_MACRO_OVERLOAD(c_with, __VA_ARGS__)
#define c_with2(declvar, drop) for (declvar, **_c_i = NULL; !_c_i; ++_c_i, drop)
#define c_with3(declvar, pred, drop) for (declvar, **_c_i = NULL; !_c_i && (pred); ++_c_i, drop)
diff --git a/include/stc/cmap.h b/include/stc/cmap.h
index b88e2722..659b89f7 100644
--- a/include/stc/cmap.h
+++ b/include/stc/cmap.h
@@ -53,7 +53,7 @@ int main(void) {
#include "forward.h"
#include <stdlib.h>
#include <string.h>
-#define _cmap_inits {0.85f}
+#define _cmap_inits {.max_load_factor=0.85f}
typedef struct { size_t idx; uint8_t hx; } chash_bucket_t;
#endif // CMAP_H_INCLUDED