Annotation of embedaddon/bird/lib/resource.h, revision 1.1
1.1 ! misho 1: /*
! 2: * BIRD Resource Manager
! 3: *
! 4: * (c) 1998--1999 Martin Mares <mj@ucw.cz>
! 5: *
! 6: * Can be freely distributed and used under the terms of the GNU GPL.
! 7: */
! 8:
! 9: #ifndef _BIRD_RESOURCE_H_
! 10: #define _BIRD_RESOURCE_H_
! 11:
! 12: #include "lib/lists.h"
! 13:
! 14: /* Resource */
! 15:
! 16: typedef struct resource {
! 17: node n; /* Inside resource pool */
! 18: struct resclass *class; /* Resource class */
! 19: } resource;
! 20:
! 21: /* Resource class */
! 22:
! 23: struct resclass {
! 24: char *name; /* Resource class name */
! 25: unsigned size; /* Standard size of single resource */
! 26: void (*free)(resource *); /* Freeing function */
! 27: void (*dump)(resource *); /* Dump to debug output */
! 28: resource *(*lookup)(resource *, unsigned long); /* Look up address (only for debugging) */
! 29: size_t (*memsize)(resource *); /* Return size of memory used by the resource, may be NULL */
! 30: };
! 31:
! 32: /* Estimate of system allocator overhead per item, for memory consumtion stats */
! 33: #define ALLOC_OVERHEAD 8
! 34:
! 35: /* Generic resource manipulation */
! 36:
! 37: typedef struct pool pool;
! 38:
! 39: void resource_init(void);
! 40: pool *rp_new(pool *, char *); /* Create new pool */
! 41: void rfree(void *); /* Free single resource */
! 42: void rdump(void *); /* Dump to debug output */
! 43: size_t rmemsize(void *res); /* Return size of memory used by the resource */
! 44: void rlookup(unsigned long); /* Look up address (only for debugging) */
! 45: void rmove(void *, pool *); /* Move to a different pool */
! 46:
! 47: void *ralloc(pool *, struct resclass *);
! 48:
! 49: extern pool root_pool;
! 50:
! 51: /* Normal memory blocks */
! 52:
! 53: void *mb_alloc(pool *, unsigned size);
! 54: void *mb_allocz(pool *, unsigned size);
! 55: void *mb_realloc(void *m, unsigned size);
! 56: void mb_free(void *);
! 57:
! 58: /* Memory pools with linear allocation */
! 59:
! 60: typedef struct linpool linpool;
! 61:
! 62: linpool *lp_new(pool *, unsigned blk);
! 63: void *lp_alloc(linpool *, unsigned size); /* Aligned */
! 64: void *lp_allocu(linpool *, unsigned size); /* Unaligned */
! 65: void *lp_allocz(linpool *, unsigned size); /* With clear */
! 66: void lp_flush(linpool *); /* Free everything, but leave linpool */
! 67:
! 68: /* Slabs */
! 69:
! 70: typedef struct slab slab;
! 71:
! 72: slab *sl_new(pool *, unsigned size);
! 73: void *sl_alloc(slab *);
! 74: void sl_free(slab *, void *);
! 75:
! 76: /*
! 77: * Low-level memory allocation functions, please don't use
! 78: * outside resource manager and possibly sysdep code.
! 79: */
! 80:
! 81: void buffer_realloc(void **buf, unsigned *size, unsigned need, unsigned item_size);
! 82:
! 83:
! 84: #ifdef HAVE_LIBDMALLOC
! 85: /*
! 86: * The standard dmalloc macros tend to produce lots of namespace
! 87: * conflicts and we use only xmalloc, xrealloc and xfree, so we
! 88: * can define the stubs ourselves.
! 89: */
! 90: #define DMALLOC_DISABLE
! 91: #include <dmalloc.h>
! 92: #define xmalloc(size) _xmalloc_leap(__FILE__, __LINE__, size)
! 93: #define xrealloc(size) _xrealloc_leap(__FILE__, __LINE__, size)
! 94: #define xfree(ptr) _xfree_leap(__FILE__, __LINE__, ptr)
! 95: #else
! 96: /*
! 97: * Unfortunately, several libraries we might want to link to define
! 98: * their own xmalloc and we don't want to interfere with them, hence
! 99: * the renaming.
! 100: */
! 101: #define xmalloc bird_xmalloc
! 102: #define xrealloc bird_xrealloc
! 103: void *xmalloc(unsigned);
! 104: void *xrealloc(void *, unsigned);
! 105: #define xfree(x) free(x)
! 106: #endif
! 107:
! 108: #endif
! 109:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>