Changeset 28
- Timestamp:
- 06/10/06 22:27:11 (3 years ago)
- Location:
- trunk/libapool
- Files:
-
- 3 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/libapool/apool.c
r27 r28 2 2 #include <stdio.h> 3 3 #include "apool.h" 4 5 #define apool_double(pool) apool_expand(pool, pool->blocks)6 4 7 5 void apool_expand (apool *pool, size_t blocks) { … … 18 16 pool->blocks += blocks; 19 17 pool->stack = calloc(pool->blocks, sizeof(void *)); 20 pool->pos += (int) blocks;21 18 22 19 /* Use the ram in reverse order */ 23 20 ram += (blocks - 1) * blocksize; 24 for (size_t i = 0; i <blocks; ram -= blocksize) {21 for (size_t i = pool->pos; i < pool->pos + blocks; ram -= blocksize) { 25 22 pool->stack[i++] = ram; 26 23 } 24 25 pool->pos += (int) blocks; 27 26 } 28 27 … … 62 61 63 62 void * apool_alloc (apool *pool) { 64 if (pool->pos == 0) { 65 apool_double(pool); 66 } 63 if (apool_empty(pool)) apool_double(pool); 67 64 68 65 return pool->stack[--pool->pos]; -
trunk/libapool/apool.h
r27 r28 14 14 } apool; 15 15 16 #define apool_double(pool) apool_expand(pool, pool->blocks) 17 #define apool_empty(pool) pool->pos == 0 18 16 19 extern apool * apool_new (size_t blocks, size_t blocksize); 17 20 extern void apool_expand (apool *pool, size_t blocks); 18 extern void apool_dobule (apool *pool);19 21 extern void apool_destroy (apool *pool); 20 22 extern void * apool_alloc (apool *pool); 21 23 extern void apool_free (apool *pool, void * chunk); 22 -
trunk/libapool/test.c
r26 r28 18 18 alist_push(list, "baz"); 19 19 20 for (int i = 0; i < 1000 ; i++) {21 alist_ unshift(list, "hahah");22 printf("%s\n", alist_pop(list));20 for (int i = 0; i < 100000000; i++) { 21 alist_push(list, "hahah"); 22 alist_shift(list); 23 23 } 24 24