From e1a353c8a82315d9456c2f33e3e4416b5f444800 Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Wed, 28 Sep 2022 14:54:27 +0200 Subject: Fixed bug in crange. Could only be iterated once. --- include/stc/ccommon.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/stc/ccommon.h b/include/stc/ccommon.h index bae0b68f..7b7dc283 100644 --- a/include/stc/ccommon.h +++ b/include/stc/ccommon.h @@ -217,7 +217,7 @@ STC_INLINE char* c_strnstrn(const char *s, const char *needle, ; (_inc > 0) ^ (i > _end); i += _inc) typedef long long crange_value; -struct {crange_value val, end, step; } typedef crange; +struct {crange_value start, end, step, val; } typedef crange; struct {crange_value *ref, end, step; } typedef crange_iter; #define crange_init() crange_make3(0, INTMAX_MAX, 1) #define crange_make(...) c_MACRO_OVERLOAD(crange_make, __VA_ARGS__) @@ -225,8 +225,8 @@ struct {crange_value *ref, end, step; } typedef crange_iter; #define crange_make2(start, stop) crange_make3(start, stop, 1) 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) - { crange_iter it = {&self->val, self->end, self->step}; return it; } +STC_INLINE crange_iter crange_begin(crange* self) + { self->val = self->start; crange_iter it = {&self->val, self->end, self->step}; return it; } STC_INLINE crange_iter crange_end(crange* self) { crange_iter it = {NULL}; return it; } STC_INLINE void crange_next(crange_iter* it) -- cgit v1.2.3