/* * Mlock Allocator * (C) 2012 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #ifndef BOTAN_MLOCK_ALLOCATOR_H_ #define BOTAN_MLOCK_ALLOCATOR_H_ #include #include #include BOTAN_FUTURE_INTERNAL_HEADER(locking_allocator.h) namespace Botan { class Memory_Pool; class BOTAN_PUBLIC_API(2,0) mlock_allocator final { public: static mlock_allocator& instance(); void* allocate(size_t num_elems, size_t elem_size); bool deallocate(void* p, size_t num_elems, size_t elem_size) noexcept; mlock_allocator(const mlock_allocator&) = delete; mlock_allocator& operator=(const mlock_allocator&) = delete; private: mlock_allocator(); ~mlock_allocator(); std::unique_ptr m_pool; std::vector m_locked_pages; }; } #endif