--- a/src/iterator.c Fri Oct 17 15:04:56 2025 +0200 +++ b/src/iterator.c Fri Oct 17 16:53:24 2025 +0200 @@ -53,7 +53,7 @@ // only move the last element when we are not currently aiming // at the last element already if (iter->index < iter->elem_count) { - void *last = ((char *) iter->src_handle.m) + void *last = ((char *) iter->src_handle) + iter->elem_count * iter->elem_size; memcpy(iter->elem_handle, last, iter->elem_size); } @@ -84,8 +84,8 @@ } } -CxIterator cxMutIterator( - void *array, +CxIterator cxIterator( + const void *array, size_t elem_size, size_t elem_count, bool remove_keeps_order @@ -93,44 +93,25 @@ CxIterator iter; iter.index = 0; - iter.src_handle.m = array; - iter.elem_handle = array; + iter.src_handle = (void*) array; + iter.elem_handle = (void*) array; iter.elem_size = elem_size; iter.elem_count = array == NULL ? 0 : elem_count; iter.base.valid = cx_iter_valid; iter.base.current = cx_iter_current; iter.base.next = remove_keeps_order ? cx_iter_next_slow : cx_iter_next_fast; iter.base.remove = false; - iter.base.mutating = true; - - return iter; -} + iter.base.allow_remove = true; -CxIterator cxIterator( - const void *array, - size_t elem_size, - size_t elem_count -) { - CxIterator iter = cxMutIterator((void*)array, elem_size, elem_count, false); - iter.base.mutating = false; - return iter; -} - -CxIterator cxMutIteratorPtr( - void *array, - size_t elem_count, - bool remove_keeps_order -) { - CxIterator iter = cxMutIterator(array, sizeof(void*), elem_count, remove_keeps_order); - iter.base.current = cx_iter_current_ptr; return iter; } CxIterator cxIteratorPtr( const void *array, - size_t elem_count + size_t elem_count, + bool remove_keeps_order ) { - CxIterator iter = cxMutIteratorPtr((void*) array, elem_count, false); - iter.base.mutating = false; + CxIterator iter = cxIterator(array, sizeof(void*), elem_count, remove_keeps_order); + iter.base.current = cx_iter_current_ptr; return iter; }