#ifndef BLOCK_CACHE_MEM_POOL_H #define BLOCK_CACHE_MEM_POOL_H #include #include #include namespace bi = boost::intrusive; //---------------------------------------------------------------- namespace bcache { // FIXME: move to base? namespace mempool_detail { struct alloc_block : public bi::list_base_hook> { }; }; class mempool { public: // alignment must be a power of 2 mempool(size_t block_size, size_t total_mem, size_t alignment = 8); ~mempool(); void *alloc(); void free(void *data); private: static void *alloc_aligned(size_t len, size_t alignment); using block_list = bi::list; void *mem_; block_list free_; //---------------- mempool(mempool const &) = delete; mempool &operator =(mempool const &) = delete; }; } //---------------------------------------------------------------- #endif