diff options
Diffstat (limited to 'source/blender/blenlib/intern/BLI_mempool.c')
-rw-r--r-- | source/blender/blenlib/intern/BLI_mempool.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/source/blender/blenlib/intern/BLI_mempool.c b/source/blender/blenlib/intern/BLI_mempool.c index d98e63d88dd..0d6b8a44a1e 100644 --- a/source/blender/blenlib/intern/BLI_mempool.c +++ b/source/blender/blenlib/intern/BLI_mempool.c @@ -27,9 +27,7 @@ /** \file blender/blenlib/intern/BLI_mempool.c * \ingroup bli - */ - -/* + * * Simple, fast memory allocator for allocating many elements of the same size. */ @@ -295,33 +293,41 @@ int BLI_mempool_count(BLI_mempool *pool) void *BLI_mempool_findelem(BLI_mempool *pool, int index) { - if (!(pool->flag & BLI_MEMPOOL_ALLOW_ITER)) { - fprintf(stderr, "%s: Error! you can't iterate over this mempool!\n", __func__); - return NULL; - } - else if ((index >= 0) && (index < pool->totused)) { + BLI_assert(pool->flag & BLI_MEMPOOL_ALLOW_ITER); + + if ((index >= 0) && (index < pool->totused)) { /* we could have some faster mem chunk stepping code inline */ BLI_mempool_iter iter; void *elem; BLI_mempool_iternew(pool, &iter); for (elem = BLI_mempool_iterstep(&iter); index-- != 0; elem = BLI_mempool_iterstep(&iter)) { /* do nothing */ - }; + } return elem; } return NULL; } -void BLI_mempool_iternew(BLI_mempool *pool, BLI_mempool_iter *iter) +/** + * \param data array of pointers at least the size of 'pool->totused' + */ +void BLI_mempool_as_array(BLI_mempool *pool, void **data) { - if (!(pool->flag & BLI_MEMPOOL_ALLOW_ITER)) { - fprintf(stderr, "%s: Error! you can't iterate over this mempool!\n", __func__); - iter->curchunk = NULL; - iter->curindex = 0; - - return; + BLI_mempool_iter iter; + void *elem; + void **p = data; + BLI_assert(pool->flag & BLI_MEMPOOL_ALLOW_ITER); + BLI_mempool_iternew(pool, &iter); + for (elem = BLI_mempool_iterstep(&iter); elem; elem = BLI_mempool_iterstep(&iter)) { + *p++ = elem; } + BLI_assert((p - data) == pool->totused); +} + +void BLI_mempool_iternew(BLI_mempool *pool, BLI_mempool_iter *iter) +{ + BLI_assert(pool->flag & BLI_MEMPOOL_ALLOW_ITER); iter->pool = pool; iter->curchunk = pool->chunks.first; |