mem-pool.hon commit Merge branch 'ds/commit-graph-on-fetch' (5a53509)
   1#ifndef MEM_POOL_H
   2#define MEM_POOL_H
   3
   4struct mp_block {
   5        struct mp_block *next_block;
   6        char *next_free;
   7        char *end;
   8        uintmax_t space[FLEX_ARRAY]; /* more */
   9};
  10
  11struct 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
  24/*
  25 * Initialize mem_pool with specified initial size.
  26 */
  27void 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 */
  32void mem_pool_discard(struct mem_pool *mem_pool, int invalidate_memory);
  33
  34/*
  35 * Alloc memory from the mem_pool.
  36 */
  37void *mem_pool_alloc(struct mem_pool *pool, size_t len);
  38
  39/*
  40 * Allocate and zero memory from the memory pool.
  41 */
  42void *mem_pool_calloc(struct mem_pool *pool, size_t count, size_t size);
  43
  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 */
  49void 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 */
  55int mem_pool_contains(struct mem_pool *mem_pool, void *mem);
  56
  57#endif