You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

mem_pool.h 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #ifndef RSPAMD_MEM_POOL_H
  2. #define RSPAMD_MEM_POOL_H
  3. #include <sys/types.h>
  4. #include <glib.h>
  5. typedef void (*pool_destruct_func)(void *ptr);
  6. struct _pool_chain {
  7. u_char *begin;
  8. u_char *pos;
  9. size_t len;
  10. struct _pool_chain *next;
  11. };
  12. struct _pool_destructors {
  13. pool_destruct_func func;
  14. void *data;
  15. struct _pool_destructors *prev;
  16. };
  17. typedef struct memory_pool_s {
  18. struct _pool_chain *cur_pool;
  19. struct _pool_chain *first_pool;
  20. struct _pool_destructors *destructors;
  21. } memory_pool_t;
  22. typedef struct memory_pool_stat_s {
  23. size_t bytes_allocated;
  24. size_t chunks_allocated;
  25. size_t chunks_freed;
  26. } memory_pool_stat_t;
  27. memory_pool_t* memory_pool_new (size_t size);
  28. void* memory_pool_alloc (memory_pool_t* pool, size_t size);
  29. void* memory_pool_alloc0 (memory_pool_t* pool, size_t size);
  30. char* memory_pool_strdup (memory_pool_t* pool, const char *src);
  31. void memory_pool_add_destructor (memory_pool_t *pool, pool_destruct_func func, void *data);
  32. void memory_pool_delete (memory_pool_t* pool);
  33. void memory_pool_stat (memory_pool_stat_t *st);
  34. #define memory_pool_free(x) ((x)->len - ((x)->pos - (x)->begin))
  35. #endif