Statistics
| Branch: | Revision:

iof-bird-daemon / lib / resource.h @ 7a2105be

History | View | Annotate | Download (1.97 KB)

1
/*
2
 *        BIRD Resource Manager
3
 *
4
 *        (c) 1998 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
};
29

    
30
/* Generic resource manipulation */
31

    
32
typedef struct pool pool;
33

    
34
void resource_init(void);
35
pool *rp_new(pool *, char *);                /* Create new pool */
36
void rfree(void *);                        /* Free single resource */
37
void rdump(void *);                        /* Dump to debug output */
38

    
39
void *ralloc(pool *, struct resclass *);
40

    
41
extern pool root_pool;
42

    
43
/* Normal memory blocks */
44

    
45
void *mb_alloc(pool *, unsigned size);
46
void *mb_allocz(pool *, unsigned size);
47
void mb_free(void *);
48

    
49
/* Memory pools with linear allocation */
50

    
51
typedef struct linpool linpool;
52

    
53
linpool *lp_new(pool *, unsigned blk);
54
void *lp_alloc(linpool *, unsigned size);        /* Aligned */
55
void *lp_allocu(linpool *, unsigned size);        /* Unaligned */
56
void *lp_allocz(linpool *, unsigned size);        /* With clear */
57

    
58
/* Slabs */
59

    
60
typedef struct slab slab;
61

    
62
slab *sl_new(pool *, unsigned size);
63
void *sl_alloc(slab *);
64
void sl_free(slab *, void *);
65

    
66
/*
67
 * Low-level memory allocation functions, please don't use
68
 * outside resource manager and possibly sysdep code.
69
 */
70

    
71
#ifdef HAVE_LIBDMALLOC
72
/*
73
 * The standard dmalloc macros tend to produce lots of namespace
74
 * conflicts and we use only xmalloc and xfree, so we can define
75
 * the stubs ourselves.
76
 */
77
#define DMALLOC_DISABLE
78
#include <dmalloc.h>
79
#define xmalloc(size) _xmalloc_leap(__FILE__, __LINE__, size)
80
#define xfree(ptr) _xfree_leap(__FILE__, __LINE__, ptr)
81
#else
82
void *xmalloc(unsigned);
83
#define xfree(x) free(x)
84
#endif
85

    
86
#endif