]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // |
2 | // allocator.hpp | |
3 | // ~~~~~~~~~~~~~ | |
4 | // | |
1e59de90 | 5 | // Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com) |
7c673cae FG |
6 | // |
7 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | |
8 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
9 | // | |
10 | ||
11 | #ifndef ALLOCATOR_HPP | |
12 | #define ALLOCATOR_HPP | |
13 | ||
14 | #include <boost/aligned_storage.hpp> | |
15 | ||
16 | // Represents a single connection from a client. | |
17 | class allocator | |
18 | { | |
19 | public: | |
20 | allocator() | |
21 | : in_use_(false) | |
22 | { | |
23 | } | |
24 | ||
25 | void* allocate(std::size_t n) | |
26 | { | |
27 | if (in_use_ || n >= 1024) | |
28 | return ::operator new(n); | |
29 | in_use_ = true; | |
30 | return static_cast<void*>(&space_); | |
31 | } | |
32 | ||
33 | void deallocate(void* p) | |
34 | { | |
35 | if (p != static_cast<void*>(&space_)) | |
36 | ::operator delete(p); | |
37 | else | |
38 | in_use_ = false; | |
39 | } | |
40 | ||
41 | private: | |
42 | allocator(const allocator&); | |
43 | allocator& operator=(const allocator&); | |
44 | ||
45 | // Whether the reusable memory space is currently in use. | |
46 | bool in_use_; | |
47 | ||
48 | // The reusable memory space made available by the allocator. | |
49 | boost::aligned_storage<1024>::type space_; | |
50 | }; | |
51 | ||
52 | #endif // ALLOCATOR_HPP |