summaryrefslogtreecommitdiff
path: root/pkarr.h
diff options
context:
space:
mode:
Diffstat (limited to 'pkarr.h')
-rw-r--r--pkarr.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/pkarr.h b/pkarr.h
index 88c6ac6..83db8ef 100644
--- a/pkarr.h
+++ b/pkarr.h
@@ -25,6 +25,13 @@ void pk_arr_remove_at(struct pk_arr *arr, uint32_t index);
void pk_arr_clone(struct pk_arr *lhs, struct pk_arr *rhs);
void pk_arr_swap(struct pk_arr *lhs, struct pk_arr *rhs);
uint32_t pk_arr_find_first_index(struct pk_arr *arr, void *user_data, pk_arr_item_compare *fn);
+#ifdef PK_IMPL_ITER
+#include "pkiter.h" /*deleteme*/
+bool pk_arr_iter_begin(struct pk_arr *arr, struct pk_iter *it);
+bool pk_arr_iter_end(struct pk_arr *arr, struct pk_iter *it);
+bool pk_arr_iter_increment(struct pk_arr *arr, struct pk_iter *it);
+bool pk_arr_iter_decrement(struct pk_arr *arr, struct pk_iter *it);
+#endif /* PK_IMPL_ITER */
#if defined(__cplusplus)
template<typename T>
@@ -294,4 +301,50 @@ pk_arr_find_first_index(struct pk_arr *arr, void *user_data, pk_arr_item_compare
return -1;
}
+#ifdef PK_IMPL_ITER
+
+bool
+pk_arr_iter_begin(struct pk_arr *arr, struct pk_iter *it) {
+ it->data = nullptr;
+ it->id.arr.i = 0;
+ if (arr->data != nullptr && arr->data != CAFE_BABE(void)) {
+ it->data = arr->data;
+ return true;
+ }
+ return false;
+}
+
+bool pk_arr_iter_end(struct pk_arr *arr, struct pk_iter *it) {
+ it->data = nullptr;
+ it->id.arr.i = 0;
+ if (arr->data != nullptr && arr->data != CAFE_BABE(void)) {
+ it->id.arr.i = arr->next - 1;
+ it->data = (void *)((char*)arr->data + (arr->stride * it->id.arr.i));
+ return true;
+ }
+ return false;
+}
+
+bool
+pk_arr_iter_increment(struct pk_arr *arr, struct pk_iter *it) {
+ if (it->id.arr.i + 1 >= arr->next) {
+ return false;
+ }
+ it->id.arr.i += 1;
+ it->data = (void *)((char*)arr->data + (arr->stride * it->id.arr.i));
+ return true;
+}
+
+bool
+pk_arr_iter_decrement(struct pk_arr *arr, struct pk_iter *it) {
+ if (it->id.arr.i == 0) {
+ return false;
+ }
+ it->id.arr.i -= 1;
+ it->data = (void *)((char*)arr->data + (arr->stride * it->id.arr.i));
+ return true;
+}
+
+#endif /* PK_IMPL_ITER */
+
#endif /* PK_IMPL_ARR */