diff options
| author | Tyge <[email protected]> | 2020-04-20 07:07:15 +0200 |
|---|---|---|
| committer | Tyge <[email protected]> | 2020-04-20 07:07:15 +0200 |
| commit | 65657dd7755d439e221be3eaa7c7b8de473ee5b9 (patch) | |
| tree | a23920bb180e14b3932292d46682d1627351c72f /stc/cvector.h | |
| parent | 1ef827e15f48d2ce07cbe1ee69de18302cb50ab3 (diff) | |
| download | STC-modified-65657dd7755d439e221be3eaa7c7b8de473ee5b9.tar.gz STC-modified-65657dd7755d439e221be3eaa7c7b8de473ee5b9.zip | |
Fixed and redesigned iterators.
Diffstat (limited to 'stc/cvector.h')
| -rw-r--r-- | stc/cvector.h | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/stc/cvector.h b/stc/cvector.h index d46905e4..069a335e 100644 --- a/stc/cvector.h +++ b/stc/cvector.h @@ -150,24 +150,23 @@ cvector_##tag##_popBack(CVector_##tag* self) { \ \
\
typedef struct cvector_##tag##_iter_t { \
- Value* item; \
+ Value *item, *end; \
} cvector_##tag##_iter_t; \
\
static inline cvector_##tag##_iter_t \
-cvector_##tag##_begin(CVector_##tag vec) { \
- return (cvector_##tag##_iter_t) {vec.data}; \
+cvector_##tag##_begin(CVector_##tag* vec) { \
+ cvector_##tag##_iter_t it; \
+ it.item = vec->data, it.end = it.item + cvector_size(*vec); \
+ if (it.item == it.end) it.item = NULL; \
+ return it; \
} \
\
static inline cvector_##tag##_iter_t \
cvector_##tag##_next(cvector_##tag##_iter_t it) { \
- ++it.item; \
+ if (++it.item == it.end) it.item = NULL; \
return it; \
} \
\
-static inline cvector_##tag##_iter_t \
-cvector_##tag##_end(CVector_##tag vec) { \
- return (cvector_##tag##_iter_t) {vec.data + cvector_size(vec)}; \
-} \
typedef Value cvector_##tag##_value_t
|
