[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42194] trunk/blender/source/blender/ blenlib: BLI_mempool_findelem() only worked when no elements were freed, use the iterator for now.
Campbell Barton
ideasman42 at gmail.com
Sun Nov 27 22:11:26 CET 2011
Revision: 42194
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42194
Author: campbellbarton
Date: 2011-11-27 21:11:17 +0000 (Sun, 27 Nov 2011)
Log Message:
-----------
BLI_mempool_findelem() only worked when no elements were freed, use the iterator for now.
Modified Paths:
--------------
trunk/blender/source/blender/blenlib/BLI_mempool.h
trunk/blender/source/blender/blenlib/intern/BLI_mempool.c
Modified: trunk/blender/source/blender/blenlib/BLI_mempool.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_mempool.h 2011-11-27 19:35:46 UTC (rev 42193)
+++ trunk/blender/source/blender/blenlib/BLI_mempool.h 2011-11-27 21:11:17 UTC (rev 42194)
@@ -55,7 +55,7 @@
void BLI_mempool_free(BLI_mempool *pool, void *addr);
void BLI_mempool_destroy(BLI_mempool *pool);
int BLI_mempool_count(BLI_mempool *pool);
-void *BLI_mempool_findelem(BLI_mempool *pool, const int index);
+void *BLI_mempool_findelem(BLI_mempool *pool, int index);
/** iteration stuff. note: this may easy to produce bugs with **/
/*private structure*/
Modified: trunk/blender/source/blender/blenlib/intern/BLI_mempool.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/BLI_mempool.c 2011-11-27 19:35:46 UTC (rev 42193)
+++ trunk/blender/source/blender/blenlib/intern/BLI_mempool.c 2011-11-27 21:11:17 UTC (rev 42194)
@@ -241,19 +241,20 @@
}
}
-void *BLI_mempool_findelem(BLI_mempool *pool, const int index)
+void *BLI_mempool_findelem(BLI_mempool *pool, int index)
{
- if ((index >= 0) && (index < pool->totused)) {
- BLI_mempool_chunk *mpchunk;
- int i= 0;
-
- for (mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) {
- if (index < i + pool->pchunk) {
- return ((char *)mpchunk->data) + (pool->esize * (index - i));
- }
- i += pool->pchunk;
- }
+ if (!pool->allow_iter) {
+ fprintf(stderr, "%s: Error! you can't iterate over this mempool!\n", __func__);
+ return NULL;
}
+ else 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)) { };
+ return elem;
+ }
return NULL;
}
More information about the Bf-blender-cvs
mailing list