From 367ec386d15ef36b948b605cf70d4bfa2681f359 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 30 Jul 2017 13:55:41 +1000 Subject: BLI_memiter: minor cleanup --- source/blender/blenlib/BLI_memiter.h | 4 ++-- source/blender/blenlib/intern/BLI_memiter.c | 31 ++++++++++++++++------------- 2 files changed, 19 insertions(+), 16 deletions(-) (limited to 'source/blender') diff --git a/source/blender/blenlib/BLI_memiter.h b/source/blender/blenlib/BLI_memiter.h index 96a47d53984..36877d8f4ba 100644 --- a/source/blender/blenlib/BLI_memiter.h +++ b/source/blender/blenlib/BLI_memiter.h @@ -34,7 +34,7 @@ extern "C" #include "BLI_compiler_compat.h" /* 512kb, good default for small elems. */ -#define BLI_MEMITER_DEFAULT_SIZE (2 << 18) +#define BLI_MEMITER_DEFAULT_SIZE (1 << 19) struct BLI_memiter; struct BLI_memiter_chunk; @@ -61,7 +61,7 @@ typedef struct BLI_memiter_handle { } BLI_memiter_handle; void BLI_memiter_iter_init(BLI_memiter *mi, BLI_memiter_handle *iter) ATTR_NONNULL(); -bool BLI_memiter_iter_done(BLI_memiter_handle *iter) ATTR_NONNULL(); +bool BLI_memiter_iter_done(const BLI_memiter_handle *iter) ATTR_NONNULL(); void *BLI_memiter_iter_step(BLI_memiter_handle *iter) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); void *BLI_memiter_iter_step_size(BLI_memiter_handle *iter, uint *r_size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); diff --git a/source/blender/blenlib/intern/BLI_memiter.c b/source/blender/blenlib/intern/BLI_memiter.c index 4d365680e8a..c86c26f578a 100644 --- a/source/blender/blenlib/intern/BLI_memiter.c +++ b/source/blender/blenlib/intern/BLI_memiter.c @@ -82,7 +82,7 @@ typedef struct BLI_memiter_chunk { } BLI_memiter_chunk; typedef struct BLI_memiter { - /* A pointer to 'head' is needed*/ + /* A pointer to 'head' is needed so we can iterate in the order allocated. */ struct BLI_memiter_chunk *head, *tail; data_t *data_curr; data_t *data_last; @@ -136,7 +136,7 @@ static void memiter_init(BLI_memiter *mi) */ BLI_memiter *BLI_memiter_create(uint chunk_size_min) { - BLI_memiter *mi = MEM_mallocN(sizeof(BLI_memiter), STRINGIFY(BLI_memiter)); + BLI_memiter *mi = MEM_mallocN(sizeof(BLI_memiter), "BLI_memiter"); memiter_init(mi); /* Small values are used for tests to check for correctness, @@ -172,7 +172,7 @@ void *BLI_memiter_alloc(BLI_memiter *mi, uint elem_size) BLI_memiter_chunk *chunk = MEM_mallocN( sizeof(BLI_memiter_chunk) + (chunk_size * sizeof(data_t)), - STRINGIFY(BLI_memiter_chunk)); + "BLI_memiter_chunk"); if (mi->head == NULL) { BLI_assert(mi->tail == NULL); @@ -269,7 +269,7 @@ void *BLI_memiter_elem_first(BLI_memiter *mi) } } -void *BLI_memiter_elem_first_size(BLI_memiter *mi, unsigned int *r_size) +void *BLI_memiter_elem_first_size(BLI_memiter *mi, uint *r_size) { if (mi->head != NULL) { BLI_memiter_chunk *chunk = mi->head; @@ -303,26 +303,27 @@ void BLI_memiter_iter_init(BLI_memiter *mi, BLI_memiter_handle *iter) iter->elem_left = mi->count; } -bool BLI_memiter_iter_done(BLI_memiter_handle *iter) +bool BLI_memiter_iter_done(const BLI_memiter_handle *iter) { return iter->elem_left != 0; } -BLI_INLINE void memiter_iter_step(BLI_memiter_handle *iter) +BLI_INLINE void memiter_chunk_step(BLI_memiter_handle *iter) { - if (UNLIKELY(iter->elem->size < 0)) { - BLI_memiter_chunk *chunk = (BLI_memiter_chunk *)(((data_t *)iter->elem) + iter->elem->size); - chunk = chunk->next; - iter->elem = chunk ? (BLI_memiter_elem *)chunk->data : NULL; - BLI_assert(iter->elem == NULL || iter->elem->size >= 0); - } + BLI_assert(iter->elem->size < 0); + BLI_memiter_chunk *chunk = (BLI_memiter_chunk *)(((data_t *)iter->elem) + iter->elem->size); + chunk = chunk->next; + iter->elem = chunk ? (BLI_memiter_elem *)chunk->data : NULL; + BLI_assert(iter->elem == NULL || iter->elem->size >= 0); } void *BLI_memiter_iter_step_size(BLI_memiter_handle *iter, uint *r_size) { if (iter->elem_left != 0) { iter->elem_left -= 1; - memiter_iter_step(iter); + if (UNLIKELY(iter->elem->size < 0)) { + memiter_chunk_step(iter); + } BLI_assert(iter->elem->size >= 0); uint size = (uint)iter->elem->size; *r_size = size; /* <-- only difference */ @@ -339,7 +340,9 @@ void *BLI_memiter_iter_step(BLI_memiter_handle *iter) { if (iter->elem_left != 0) { iter->elem_left -= 1; - memiter_iter_step(iter); + if (UNLIKELY(iter->elem->size < 0)) { + memiter_chunk_step(iter); + } BLI_assert(iter->elem->size >= 0); uint size = (uint)iter->elem->size; data_t *data = iter->elem->data; -- cgit v1.2.3