]>
Commit | Line | Data |
---|---|---|
065feab4 JM |
1 | #ifndef MEM_POOL_H |
2 | #define MEM_POOL_H | |
3 | ||
4 | struct mp_block { | |
5 | struct mp_block *next_block; | |
6 | char *next_free; | |
7 | char *end; | |
8 | uintmax_t space[FLEX_ARRAY]; /* more */ | |
9 | }; | |
10 | ||
11 | struct mem_pool { | |
12 | struct mp_block *mp_block; | |
13 | ||
14 | /* | |
15 | * The amount of available memory to grow the pool by. | |
16 | * This size does not include the overhead for the mp_block. | |
17 | */ | |
18 | size_t block_alloc; | |
19 | ||
20 | /* The total amount of memory allocated by the pool. */ | |
21 | size_t pool_alloc; | |
22 | }; | |
23 | ||
158dfeff JM |
24 | /* |
25 | * Initialize mem_pool with specified initial size. | |
26 | */ | |
27 | void mem_pool_init(struct mem_pool **mem_pool, size_t initial_size); | |
28 | ||
29 | /* | |
30 | * Discard a memory pool and free all the memory it is responsible for. | |
31 | */ | |
8616a2d0 | 32 | void mem_pool_discard(struct mem_pool *mem_pool, int invalidate_memory); |
158dfeff | 33 | |
065feab4 JM |
34 | /* |
35 | * Alloc memory from the mem_pool. | |
36 | */ | |
37 | void *mem_pool_alloc(struct mem_pool *pool, size_t len); | |
38 | ||
39 | /* | |
40 | * Allocate and zero memory from the memory pool. | |
41 | */ | |
42 | void *mem_pool_calloc(struct mem_pool *pool, size_t count, size_t size); | |
43 | ||
0e58301d JM |
44 | /* |
45 | * Move the memory associated with the 'src' pool to the 'dst' pool. The 'src' | |
46 | * pool will be empty and not contain any memory. It still needs to be free'd | |
47 | * with a call to `mem_pool_discard`. | |
48 | */ | |
49 | void mem_pool_combine(struct mem_pool *dst, struct mem_pool *src); | |
50 | ||
51 | /* | |
52 | * Check if a memory pointed at by 'mem' is part of the range of | |
53 | * memory managed by the specified mem_pool. | |
54 | */ | |
55 | int mem_pool_contains(struct mem_pool *mem_pool, void *mem); | |
56 | ||
065feab4 | 57 | #endif |