2 * UCW Library -- Fast Allocator for Fixed-Size Elements
4 * (c) 2007 Martin Mares <mj@ucw.cz>
6 * This software may be freely distributed and used according to the terms
7 * of the GNU Lesser General Public License.
10 #ifndef _UCW_ELTPOOL_H
11 #define _UCW_ELTPOOL_H
14 struct eltpool_chunk *first_chunk;
15 struct eltpool_free *first_free;
19 uns num_allocated; // Just for debugging
22 struct eltpool_chunk {
23 struct eltpool_chunk *next;
24 /* Chunk data continue here */
28 struct eltpool_free *next;
31 struct eltpool *ep_new(uns elt_size, uns elts_per_chunk);
32 void ep_delete(struct eltpool *pool);
33 void *ep_alloc_slow(struct eltpool *pool);
36 ep_alloc(struct eltpool *pool)
38 pool->num_allocated++;
39 #ifdef CONFIG_FAKE_ELTPOOL
40 return xmalloc(pool->elt_size);
42 struct eltpool_free *elt;
43 if (elt = pool->first_free)
44 pool->first_free = elt->next;
46 elt = ep_alloc_slow(pool);
52 ep_free(struct eltpool *pool, void *p)
54 pool->num_allocated--;
55 #ifdef CONFIG_FAKE_ELTPOOL
59 struct eltpool_free *elt = p;
60 elt->next = pool->first_free;
61 pool->first_free = elt;