File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / bird / lib / resource.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Aug 22 12:33:54 2017 UTC (6 years, 10 months ago) by misho
Branches: bird, MAIN
CVS tags: v1_6_8p3, v1_6_3p0, v1_6_3, HEAD
bird 1.6.3

    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>