Annotation of embedaddon/bird/lib/resource.h, revision 1.1.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>