53 lines
1.1 KiB
C++
53 lines
1.1 KiB
C++
|
//
|
||
|
// 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 <boost/aligned_storage.hpp>
|
||
|
|
||
|
// 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<void*>(&space_);
|
||
|
}
|
||
|
|
||
|
void deallocate(void* p)
|
||
|
{
|
||
|
if (p != static_cast<void*>(&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
|