diff options
| author | Tyge Løvset <[email protected]> | 2022-11-01 12:23:49 +0100 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2022-11-01 12:23:49 +0100 |
| commit | 996de4d414603f10a493c6705a9c6aef3168aa30 (patch) | |
| tree | 2fd8ebb49375407a2cd6e35fb60c737219bc85d0 /include | |
| parent | 11fe640c0c21a1ba1cca677be7b2d602f0bff4a9 (diff) | |
| download | STC-modified-996de4d414603f10a493c6705a9c6aef3168aa30.tar.gz STC-modified-996de4d414603f10a493c6705a9c6aef3168aa30.zip | |
Modified the not-yet-documented stc/views.h
Renamed listview => clview
clview_literal(), and crange_literal() creates
compound literal objects.
Diffstat (limited to 'include')
| -rw-r--r-- | include/stc/views.h | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/include/stc/views.h b/include/stc/views.h index 31aaba0d..7ac50957 100644 --- a/include/stc/views.h +++ b/include/stc/views.h @@ -23,27 +23,38 @@ /* #include <stdio.h> #include <stc/views.h> -using_listview(IView, int); +using_clview(IView, int); int main() { int array[] = {1, 2, 3, 4, 5}; - IView iv = IView_init(array, c_arraylen(array)); + IView iv = {array, c_arraylen(array)}; - c_foreach (i, IView, iv) printf(" %d", *i.ref); + c_foreach (i, IView, iv) + printf(" %d", *i.ref); puts(""); - - c_forfilter (i, IView, c_listview(IView, {10, 20, 30, 22, 23}) + + // use a temporary IView object. + c_forfilter (i, IView, clview_literal(IView, {10, 20, 30, 23, 22, 21}) , c_flt_skipwhile(i, *i.ref < 25) - , c_flt_take(i, 2)) + && (*i.ref & 1) == 0 // even only + , c_flt_take(i, 2)) // break after 2 printf(" %d", *i.ref); puts(""); - crange r1 = crange_init(80, 90); - c_foreach (i, crange, r1) printf(" %lld", *i.ref); + // crange: + + crange r1 = crange_make(80, 90); + c_foreach (i, crange, r1) + printf(" %lld", *i.ref); puts(""); - c_foreach (i, crange, c_range(0, 100, 8)) printf(" %lld", *i.ref); + // use a temporary crange object. + int a = 100, b = INT32_MAX; + c_forfilter (i, crange, crange_literal(a, b, 8) + , i.index > 10 + , c_flt_take(i, 3)) + printf(" %lld", *i.ref); puts(""); } */ @@ -52,18 +63,17 @@ int main() #include <stc/ccommon.h> -#define c_listview(C, ...) \ +// clview type + +#define clview_literal(C, ...) \ ((C){.data = (C##_value[])__VA_ARGS__, \ .size = sizeof((C##_value[])__VA_ARGS__)/sizeof(C##_value)}) -#define using_listview(Self, T) \ +#define using_clview(Self, T) \ typedef T Self##_raw; typedef const Self##_raw Self##_value; \ typedef struct { Self##_value *data; size_t size; } Self; \ typedef struct { Self##_value *ref, *end; } Self##_iter; \ \ -STC_INLINE Self Self##_init(Self##_value* data, size_t size) \ - { Self me = {.data=data, .size=size}; return me; } \ - \ STC_INLINE Self##_value* Self##_at(const Self* self, size_t idx) \ { assert(idx < self->size); return self->data + idx; } \ \ @@ -82,19 +92,21 @@ STC_INLINE void Self##_next(Self##_iter* it) \ struct stc_nostruct -#define c_range(...) \ - (*(crange[]){crange_init(__VA_ARGS__)}) +// crange type + +#define crange_literal(...) \ + (*(crange[]){crange_make(__VA_ARGS__)}) #define crange_MAX INT64_MAX typedef long long crange_value; typedef struct { crange_value start, end, step, value; } crange; typedef struct { crange_value *ref, end, step; } crange_iter; -#define crange_init(...) c_MACRO_OVERLOAD(crange_init, __VA_ARGS__) -#define crange_init1(stop) crange_init3(0, stop, 1) -#define crange_init2(start, stop) crange_init3(start, stop, 1) +#define crange_make(...) c_MACRO_OVERLOAD(crange_make, __VA_ARGS__) +#define crange_make1(stop) crange_make3(0, stop, 1) +#define crange_make2(start, stop) crange_make3(start, stop, 1) -STC_INLINE crange crange_init3(crange_value start, crange_value stop, crange_value step) +STC_INLINE crange crange_make3(crange_value start, crange_value stop, crange_value step) { crange r = {start, stop - (step > 0), step}; return r; } STC_INLINE crange_iter crange_begin(crange* self) |
