BLI_memiter: minor cleanup

This commit is contained in:
Campbell Barton 2017-07-30 13:55:41 +10:00
parent be97238308
commit 367ec386d1
2 changed files with 19 additions and 16 deletions

View File

@ -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();

View File

@ -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;