Enlightenment CVS committal Author : doursse Project : e17 Module : libs/evas
Dir : e17/libs/evas/src/lib Modified Files: main.c Log Message: * move evas_mempool from main.c to it's own file in data/ as it's only used by evas_list * add a header files for evas_cache, evas_path and evas_module * remove trailing spaces in evas_list.c =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/main.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- main.c 14 Mar 2008 16:49:47 -0000 1.19 +++ main.c 10 Jul 2008 16:38:54 -0000 1.20 @@ -207,184 +207,3 @@ }; return "<UNKNOWN>"; } - - - - - - - - -//#define NOPOOL - -typedef struct _Pool Pool; - -struct _Pool -{ - int usage; - void *base; - Pool *prev, *next; -}; - -Pool * -_evas_mp_pool_new(Evas_Mempool *pool) -#ifdef NOPOOL -{ - static Pool thepool; - return &thepool; -} -#else -{ - Pool *p; - void **ptr; - int item_alloc, i; - - item_alloc = ((pool->item_size + sizeof(void *) - 1) / sizeof(void *)) * sizeof(void *); - p = malloc(sizeof(Pool) + (pool->pool_size * item_alloc)); - ptr = (void **)(((unsigned char *)p) + sizeof(Pool)); - p->usage = 0; - p->base = ptr; - for (i = 0; i < pool->pool_size - 1; i++) - { - *ptr = (void **)(((unsigned char *)ptr) + item_alloc); - ptr = *ptr; - } - *ptr = NULL; - return p; -} -#endif - -void -_evas_mp_pool_free(Pool *p) -#ifdef NOPOOL -{ -} -#else -{ - free(p); -} -#endif - -void * -evas_mempool_malloc(Evas_Mempool *pool, int size) -#ifdef NOPOOL -{ - return malloc(size); -} -#else -{ - Pool *p; - void *mem; - - for (p = pool->first; p; p = p->next) // look 4 pool from 2nd bucket on - { - if (p->base) // base is not NULL - has a free slot - { - if (p->prev) - { - if (pool->last == p) pool->last = p->prev; - p->prev->next = p->next; - p->prev = NULL; - p->next = pool->first; - p->next->prev = p; - pool->first = p; - } - break; - } - } - if (!p) // we have reached the end of the list - no free pools - { - p = _evas_mp_pool_new(pool); - if (!p) return NULL; - p->prev = NULL; - p->next = pool->first; - if (p->next) p->next->prev = p; - if (!pool->last) pool->last = p; - pool->first = p; - } - mem = p->base; // this points to the next free block - so take it - p->base = *((void **)mem); // base now points to the next free block - if (!p->base) // move to end - it just filled up - { - if (p->next) - { - if (p->prev) p->prev->next = p->next; - else pool->first = p->next; - p->next->prev = p->prev; - ((Pool *)pool->last)->next = p; - p->prev = pool->last; - p->next = NULL; - pool->last = p; - } - } - p->usage++; - pool->usage++; - return mem; -} -#endif - -void -evas_mempool_free(Evas_Mempool *pool, void *ptr) -#ifdef NOPOOL -{ - free(ptr); -} -#else -{ - Pool *p; - void *pmem; - int item_alloc, psize; - - item_alloc = ((pool->item_size + sizeof(void *) - 1) / sizeof(void *)) * sizeof(void *); - psize = item_alloc * pool->pool_size; - for (p = (Pool *)(pool->first); p; p = p->next) // look 4 pool - { - pmem = (void *)(((unsigned char *)p) + sizeof(Pool)); // pool mem base - if ((ptr >= pmem) && ((unsigned char *)ptr < (((unsigned char *)pmem) + psize))) // is it in pool mem? - { - *((void **)ptr) = p->base; // freed node points to prev free node - p->base = ptr; // next free node is now the one we freed - p->usage--; - pool->usage--; - if (p->usage == 0) // free bucket - { - if (p->prev) p->prev->next = p->next; - if (p->next) p->next->prev = p->prev; - if (pool->last == p) pool->last = p->prev; - if (pool->first == p) pool->first = p->next; - _evas_mp_pool_free(p); - } - else - { - if (p->prev) // if not the first - move to front - { - p->prev->next = p->next; - if (p->next) p->next->prev = p->prev; - if (pool->last == p) pool->last = p->prev; - p->prev = NULL; - p->next = pool->first; - p->next->prev = p; - pool->first = p; - } - } - break; - } - } -} -#endif - -void * -evas_mempool_calloc(Evas_Mempool *pool, int size) -#ifdef NOPOOL -{ - return calloc(1, size); -} -#else -{ - void *mem; - - mem = evas_mempool_malloc(pool, size); - memset(mem, 0, size); - return mem; -} -#endif ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs