// // allocator.hpp // ~~~~~~~~~~~~~ // // Copyright (c) 2003-2023 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #ifndef ALLOCATOR_HPP #define ALLOCATOR_HPP #include // Represents a single connection from a client. class allocator { public: allocator() : in_use_(false) { } void* allocate(std::size_t n) { if (in_use_ || n >= 1024) return ::operator new(n); in_use_ = true; return static_cast(&space_); } void deallocate(void* p) { if (p != static_cast(&space_)) ::operator delete(p); else in_use_ = false; } private: allocator(const allocator&); allocator& operator=(const allocator&); // Whether the reusable memory space is currently in use. bool in_use_; // The reusable memory space made available by the allocator. boost::aligned_storage<1024>::type space_; }; #endif // ALLOCATOR_HPP