Hi, This commit broke building in OSX with CMake + Unix Makefiles: http://www.pasteall.org/26489
No time to look at that now, I hope someone can figure out the fix for it ;) -- Dalai 2011/11/16 Campbell Barton <ideasma...@gmail.com>: > Revision: 41932 > > http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41932 > Author: campbellbarton > Date: 2011-11-16 19:31:42 +0000 (Wed, 16 Nov 2011) > Log Message: > ----------- > merge mempool changes from bmesh (adds mempool iterator). > > Modified Paths: > -------------- > trunk/blender/source/blender/blenkernel/intern/BME_Customdata.c > trunk/blender/source/blender/blenkernel/intern/BME_mesh.c > trunk/blender/source/blender/blenkernel/intern/customdata.c > trunk/blender/source/blender/blenlib/BLI_mempool.h > trunk/blender/source/blender/blenlib/intern/BLI_ghash.c > trunk/blender/source/blender/blenlib/intern/BLI_mempool.c > trunk/blender/source/blender/imbuf/intern/moviecache.c > > Modified: trunk/blender/source/blender/blenkernel/intern/BME_Customdata.c > =================================================================== > --- trunk/blender/source/blender/blenkernel/intern/BME_Customdata.c > 2011-11-16 19:26:11 UTC (rev 41931) > +++ trunk/blender/source/blender/blenkernel/intern/BME_Customdata.c > 2011-11-16 19:31:42 UTC (rev 41932) > @@ -86,7 +86,7 @@ > if(data->totlayer){ > /*alloc memory*/ > data->layers = > MEM_callocN(sizeof(BME_CustomDataLayer)*data->totlayer, "BMesh Custom Data > Layers"); > - data->pool = BLI_mempool_create(data->totsize, initalloc, > initalloc, 0); > + data->pool = BLI_mempool_create(data->totsize, initalloc, > initalloc, FALSE, FALSE); > /*initialize layer data*/ > for(i=0; i < BME_CD_NUMTYPES; i++){ > if(init->layout[i]){ > > Modified: trunk/blender/source/blender/blenkernel/intern/BME_mesh.c > =================================================================== > --- trunk/blender/source/blender/blenkernel/intern/BME_mesh.c 2011-11-16 > 19:26:11 UTC (rev 41931) > +++ trunk/blender/source/blender/blenkernel/intern/BME_mesh.c 2011-11-16 > 19:31:42 UTC (rev 41932) > @@ -55,10 +55,10 @@ > /*allocate the structure*/ > BME_Mesh *bm = MEM_callocN(sizeof(BME_Mesh),"BMesh"); > /*allocate the memory pools for the mesh elements*/ > - bm->vpool = BLI_mempool_create(sizeof(BME_Vert), allocsize[0], > allocsize[0], 0); > - bm->epool = BLI_mempool_create(sizeof(BME_Edge), allocsize[1], > allocsize[1], 0); > - bm->lpool = BLI_mempool_create(sizeof(BME_Loop), allocsize[2], > allocsize[2], 0); > - bm->ppool = BLI_mempool_create(sizeof(BME_Poly), allocsize[3], > allocsize[3], 0); > + bm->vpool = BLI_mempool_create(sizeof(BME_Vert), allocsize[0], > allocsize[0], FALSE, FALSE); > + bm->epool = BLI_mempool_create(sizeof(BME_Edge), allocsize[1], > allocsize[1], FALSE, FALSE); > + bm->lpool = BLI_mempool_create(sizeof(BME_Loop), allocsize[2], > allocsize[2], FALSE, FALSE); > + bm->ppool = BLI_mempool_create(sizeof(BME_Poly), allocsize[3], > allocsize[3], FALSE, FALSE); > return bm; > } > /* > > Modified: trunk/blender/source/blender/blenkernel/intern/customdata.c > =================================================================== > --- trunk/blender/source/blender/blenkernel/intern/customdata.c 2011-11-16 > 19:26:11 UTC (rev 41931) > +++ trunk/blender/source/blender/blenkernel/intern/customdata.c 2011-11-16 > 19:31:42 UTC (rev 41932) > @@ -2009,7 +2009,7 @@ > > > void CustomData_bmesh_init_pool(CustomData *data, int allocsize){ > - if(data->totlayer)data->pool = BLI_mempool_create(data->totsize, > allocsize, allocsize, 0); > + if(data->totlayer)data->pool = BLI_mempool_create(data->totsize, > allocsize, allocsize, FALSE, FALSE); > } > > void CustomData_bmesh_free_block(CustomData *data, void **block) > > Modified: trunk/blender/source/blender/blenlib/BLI_mempool.h > =================================================================== > --- trunk/blender/source/blender/blenlib/BLI_mempool.h 2011-11-16 19:26:11 > UTC (rev 41931) > +++ trunk/blender/source/blender/blenlib/BLI_mempool.h 2011-11-16 19:31:42 > UTC (rev 41932) > @@ -34,12 +34,45 @@ > * \brief Simple fast memory allocator. > */ > > +#ifdef __cplusplus > +extern "C" > +{ > +#endif > + > struct BLI_mempool; > +struct BLI_mempool_chunk; > > -struct BLI_mempool *BLI_mempool_create(int esize, int tote, int pchunk, int > use_sysmalloc); > -void *BLI_mempool_alloc(struct BLI_mempool *pool); > -void *BLI_mempool_calloc(struct BLI_mempool *pool); > -void BLI_mempool_free(struct BLI_mempool *pool, void *addr); > -void BLI_mempool_destroy(struct BLI_mempool *pool); > +typedef struct BLI_mempool BLI_mempool; > > +/*allow_iter allows iteration on this mempool. note: this requires that the > + first four bytes of the elements never contain the character string > + 'free'. use with care.*/ > + > +BLI_mempool *BLI_mempool_create(int esize, int tote, int pchunk, > + short use_sysmalloc, short allow_iter); > +void *BLI_mempool_alloc(BLI_mempool *pool); > +void *BLI_mempool_calloc(BLI_mempool *pool); > +void BLI_mempool_free(BLI_mempool *pool, void *addr); > +void BLI_mempool_destroy(BLI_mempool *pool); > +int BLI_mempool_count(BLI_mempool *pool); > + > +/** iteration stuff. note: this may easy to produce bugs with **/ > +/*private structure*/ > +typedef struct BLI_mempool_iter { > + BLI_mempool *pool; > + struct BLI_mempool_chunk *curchunk; > + int curindex; > +} BLI_mempool_iter; > + > +/*allow iteration on this mempool. note: this requires that the > + first four bytes of the elements never contain the character string > + 'free'. use with care.*/ > +void BLI_mempool_allow_iter(BLI_mempool *pool); > +void BLI_mempool_iternew(BLI_mempool *pool, BLI_mempool_iter *iter); > +void *BLI_mempool_iterstep(BLI_mempool_iter *iter); > + > +#ifdef __cplusplus > +} > #endif > + > +#endif > > Modified: trunk/blender/source/blender/blenlib/intern/BLI_ghash.c > =================================================================== > --- trunk/blender/source/blender/blenlib/intern/BLI_ghash.c 2011-11-16 > 19:26:11 UTC (rev 41931) > +++ trunk/blender/source/blender/blenlib/intern/BLI_ghash.c 2011-11-16 > 19:31:42 UTC (rev 41932) > @@ -60,7 +60,7 @@ > GHash *gh= MEM_mallocN(sizeof(*gh), info); > gh->hashfp= hashfp; > gh->cmpfp= cmpfp; > - gh->entrypool = BLI_mempool_create(sizeof(Entry), 64, 64, 0); > + gh->entrypool = BLI_mempool_create(sizeof(Entry), 64, 64, FALSE, > FALSE); > > gh->cursize= 0; > gh->nentries= 0; > > Modified: trunk/blender/source/blender/blenlib/intern/BLI_mempool.c > =================================================================== > --- trunk/blender/source/blender/blenlib/intern/BLI_mempool.c 2011-11-16 > 19:26:11 UTC (rev 41931) > +++ trunk/blender/source/blender/blenlib/intern/BLI_mempool.c 2011-11-16 > 19:31:42 UTC (rev 41932) > @@ -20,7 +20,7 @@ > * > * The Original Code is: all of this file. > * > - * Contributor(s): none yet. > + * Contributor(s): Geoffery Bantle > * > * ***** END GPL LICENSE BLOCK ***** > */ > @@ -29,18 +29,36 @@ > * \ingroup bli > */ > > - > /* > - Simple, fast memory allocator for allocating many elements of the > same size. > -*/ > + * Simple, fast memory allocator for allocating many elements of the same > size. > + */ > > +#include "BLI_utildefines.h" > +#include "BLI_listbase.h" > + > +#include "BLI_mempool.h" /* own include */ > + > +#include "DNA_listBase.h" > + > #include "MEM_guardedalloc.h" > -#include "BLI_blenlib.h" > -#include "BLI_mempool.h" > -#include <string.h> > > +#include <string.h> > +#include <stdlib.h> > + > +/* note: copied from BKE_utildefines.h, dont use here because we're in BLI */ > +#ifdef __BIG_ENDIAN__ > +/* Big Endian */ > +# define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) ) > +#else > +/* Little Endian */ > +# define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) ) > +#endif > + > +#define FREEWORD MAKE_ID('f', 'r', 'e', 'e') > + > typedef struct BLI_freenode { > struct BLI_freenode *next; > + int freeword; /* used to identify this as a freed node */ > } BLI_freenode; > > typedef struct BLI_mempool_chunk { > @@ -50,33 +68,42 @@ > > typedef struct BLI_mempool { > struct ListBase chunks; > - int esize, csize, pchunk; /*size of elements and chunks > in bytes and number of elements per chunk*/ > - struct BLI_freenode *free; /*free element list. > Interleaved into chunk datas.*/ > - int totalloc, totused; /*total number of elements allocated in total, > and currently in use*/ > - int use_sysmalloc; > + int esize, csize, pchunk; /* size of elements and chunks in > bytes > + * and number of elements per chunk*/ > + short use_sysmalloc, allow_iter; > + /* keeps aligned to 16 bits */ > + > + BLI_freenode *free; /* free element list. > Interleaved into chunk datas.*/ > + int totalloc, totused; /* total number of elements > allocated in total, > + * and currently in use*/ > } BLI_mempool; > > -BLI_mempool *BLI_mempool_create(int esize, int tote, int pchunk, int > use_sysmalloc) > +#define MEMPOOL_ELEM_SIZE_MIN (sizeof(void *) * 2) > + > +BLI_mempool *BLI_mempool_create(int esize, int tote, int pchunk, > + short use_sysmalloc, short allow_iter) > { > BLI_mempool *pool = NULL; > BLI_freenode *lasttail = NULL, *curnode = NULL; > int i,j, maxchunks; > char *addr; > - > - if (esize < sizeof(void*)) > - esize = sizeof(void*); > - > + > + if (esize < MEMPOOL_ELEM_SIZE_MIN) > + esize = MEMPOOL_ELEM_SIZE_MIN; > + > /*allocate the pool structure*/ > pool = use_sysmalloc ? malloc(sizeof(BLI_mempool)) : > MEM_mallocN(sizeof(BLI_mempool), "memory pool"); > - pool->esize = esize; > + pool->esize = allow_iter ? MAX2(esize, sizeof(BLI_freenode)) : esize; > pool->use_sysmalloc = use_sysmalloc; > pool->pchunk = pchunk; > pool->csize = esize * pchunk; > pool->chunks.first = pool->chunks.last = NULL; > pool->totused= 0; > + pool->allow_iter= allow_iter; > > maxchunks = tote / pchunk + 1; > - > + if (maxchunks==0) maxchunks = 1; > + > /*allocate the actual chunks*/ > for (i=0; i < maxchunks; i++) { > BLI_mempool_chunk *mpchunk = use_sysmalloc ? > malloc(sizeof(BLI_mempool_chunk)) : MEM_mallocN(sizeof(BLI_mempool_chunk), > "BLI_Mempool Chunk"); > @@ -84,15 +111,30 @@ > mpchunk->data = use_sysmalloc ? malloc(pool->csize) : > MEM_mallocN(pool->csize, "BLI Mempool Chunk Data"); > BLI_addtail(&(pool->chunks), mpchunk); > > - if (i==0) pool->free = mpchunk->data; /*start of the list*/ > + if (i==0) { > + pool->free = mpchunk->data; /*start of the list*/ > + if (pool->allow_iter) > + pool->free->freeword = FREEWORD; > + } > + > /*loop through the allocated data, building the pointer > structures*/ > for (addr = mpchunk->data, j=0; j < pool->pchunk; j++) { > curnode = ((BLI_freenode*)addr); > addr += pool->esize; > curnode->next = (BLI_freenode*)addr; > + if (pool->allow_iter) { > + if (j != pool->pchunk-1) > + curnode->next->freeword = FREEWORD; > + curnode->freeword = FREEWORD; > + } > } > /*final pointer in the previously allocated chunk is wrong.*/ > - if (lasttail) lasttail->next = mpchunk->data; > + if (lasttail) { > + lasttail->next = mpchunk->data; > + if (pool->allow_iter) > + lasttail->freeword = FREEWORD; > + } > + > /*set the end of this chunks memoryy to the new tail for next > iteration*/ > lasttail = curnode; > > @@ -121,10 +163,18 @@ > BLI_addtail(&(pool->chunks), mpchunk); > > pool->free = mpchunk->data; /*start of the list*/ > - for (addr = mpchunk->data, j=0; j < pool->pchunk; j++) { > + if (pool->allow_iter) > + pool->free->freeword = FREEWORD; > + for(addr = mpchunk->data, j=0; j < pool->pchunk; j++){ > curnode = ((BLI_freenode*)addr); > addr += pool->esize; > curnode->next = (BLI_freenode*)addr; > + > + if (pool->allow_iter) { > + curnode->freeword = FREEWORD; > > @@ Diff output truncated at 10240 characters. @@ > _______________________________________________ > Bf-blender-cvs mailing list > bf-blender-...@blender.org > http://lists.blender.org/mailman/listinfo/bf-blender-cvs > _______________________________________________ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers