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
23 struct eltpool_chunk {
24 struct eltpool_chunk *next;
25 /* Chunk data continue here */
29 struct eltpool_free *next;
32 struct eltpool *ep_new(uns elt_size, uns elts_per_chunk);
33 void ep_delete(struct eltpool *pool);
34 void *ep_alloc_slow(struct eltpool *pool);
35 u64 ep_total_size(struct eltpool *pool);
38 ep_alloc(struct eltpool *pool)
40 pool->num_allocated++;
41 #ifdef CONFIG_FAKE_ELTPOOL
42 return xmalloc(pool->elt_size);
44 struct eltpool_free *elt;
45 if (elt = pool->first_free)
46 pool->first_free = elt->next;
48 elt = ep_alloc_slow(pool);
54 ep_free(struct eltpool *pool, void *p)
56 pool->num_allocated--;
57 #ifdef CONFIG_FAKE_ELTPOOL
61 struct eltpool_free *elt = p;
62 elt->next = pool->first_free;
63 pool->first_free = elt;