summaryrefslogtreecommitdiffhomepage
path: root/stc/cvector.h
diff options
context:
space:
mode:
authorTyge <[email protected]>2020-04-20 07:07:15 +0200
committerTyge <[email protected]>2020-04-20 07:07:15 +0200
commit65657dd7755d439e221be3eaa7c7b8de473ee5b9 (patch)
treea23920bb180e14b3932292d46682d1627351c72f /stc/cvector.h
parent1ef827e15f48d2ce07cbe1ee69de18302cb50ab3 (diff)
downloadSTC-modified-65657dd7755d439e221be3eaa7c7b8de473ee5b9.tar.gz
STC-modified-65657dd7755d439e221be3eaa7c7b8de473ee5b9.zip
Fixed and redesigned iterators.
Diffstat (limited to 'stc/cvector.h')
-rw-r--r--stc/cvector.h15
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