]>
git.ipfire.org Git - thirdparty/bird.git/blob - lib/resource.h
2 * BIRD Resource Manager
4 * (c) 1998--1999 Martin Mares <mj@ucw.cz>
6 * Can be freely distributed and used under the terms of the GNU GPL.
9 #ifndef _BIRD_RESOURCE_H_
10 #define _BIRD_RESOURCE_H_
12 #include "lib/lists.h"
16 typedef struct resource
{
17 node n
; /* Inside resource pool */
18 struct resclass
*class; /* Resource class */
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 */
32 /* Estimate of system allocator overhead per item, for memory consumtion stats */
33 #define ALLOC_OVERHEAD 8
35 /* Generic resource manipulation */
37 typedef struct pool pool
;
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 */
47 void *ralloc(pool
*, struct resclass
*);
49 extern pool root_pool
;
51 /* Normal memory blocks */
53 void *mb_alloc(pool
*, unsigned size
);
54 void *mb_allocz(pool
*, unsigned size
);
55 void *mb_realloc(pool
*p
, void *m
, unsigned size
);
58 /* Memory pools with linear allocation */
60 typedef struct linpool linpool
;
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 */
70 typedef struct slab slab
;
72 slab
*sl_new(pool
*, unsigned size
);
73 void *sl_alloc(slab
*);
74 void sl_free(slab
*, void *);
77 * Low-level memory allocation functions, please don't use
78 * outside resource manager and possibly sysdep code.
81 #ifdef HAVE_LIBDMALLOC
83 * The standard dmalloc macros tend to produce lots of namespace
84 * conflicts and we use only xmalloc, xrealloc and xfree, so we
85 * can define the stubs ourselves.
87 #define DMALLOC_DISABLE
89 #define xmalloc(size) _xmalloc_leap(__FILE__, __LINE__, size)
90 #define xrealloc(size) _xrealloc_leap(__FILE__, __LINE__, size)
91 #define xfree(ptr) _xfree_leap(__FILE__, __LINE__, ptr)
94 * Unfortunately, several libraries we might want to link to define
95 * their own xmalloc and we don't want to interfere with them, hence
98 #define xmalloc bird_xmalloc
99 #define xrealloc bird_xrealloc
100 void *xmalloc(unsigned);
101 void *xrealloc(void *, unsigned);
102 #define xfree(x) free(x)