X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Fpools.h;h=3526aec0bfc9ed5627ded9464e4b33dfa2095106;hb=8ffdaed1c5f5bf4ad0914b8d17f14af51ce037a5;hp=3129c6a7a7bda97bf4ebbbbe4ba5e6382d15f3e5;hpb=9d5027b958e0ed7d2fa2c804fd255d686e8da5a7;p=libucw.git diff --git a/lib/pools.h b/lib/pools.h index 3129c6a7..3526aec0 100644 --- a/lib/pools.h +++ b/lib/pools.h @@ -1,7 +1,7 @@ /* * Sherlock Library -- Memory Pools * - * (c) 1997 Martin Mares, + * (c) 1997--2001 Martin Mares */ #ifndef POOL_ALIGN @@ -9,31 +9,34 @@ #endif struct mempool { - struct memchunk *chunks; byte *free, *last; + struct memchunk *first, *current, **plast; + struct memchunk *first_large; uns chunk_size, threshold; }; -struct mempool *new_pool(uns); -void free_pool(struct mempool *); -void *pool_alloc(struct mempool *, uns); +struct mempool *mp_new(uns); +void mp_delete(struct mempool *); +void mp_flush(struct mempool *); +void *mp_alloc(struct mempool *, uns); +void *mp_alloc_zero(struct mempool *, uns); -extern inline void *fast_alloc(struct mempool *p, uns l) +static inline void *mp_alloc_fast(struct mempool *p, uns l) { - void *f = (void *) (((uns) p->free + POOL_ALIGN - 1) & ~(POOL_ALIGN - 1)); + byte *f = (void *) (((uns) p->free + POOL_ALIGN - 1) & ~(POOL_ALIGN - 1)); byte *ee = f + l; if (ee > p->last) - return pool_alloc(p, l); + return mp_alloc(p, l); p->free = ee; return f; } -extern inline void *fast_alloc_noalign(struct mempool *p, uns l) +static inline void *mp_alloc_fast_noalign(struct mempool *p, uns l) { - void *f = p->free; + byte *f = p->free; byte *ee = f + l; if (ee > p->last) - return pool_alloc(p, l); + return mp_alloc(p, l); p->free = ee; return f; }