Library of Assembled Shared Sources
lass_allocator.inl
Go to the documentation of this file.
1/** @file
2 * @author Bram de Greve (bram@cocamware.com)
3 * @author Tom De Muer (tom@cocamware.com)
4 *
5 * *** BEGIN LICENSE INFORMATION ***
6 *
7 * The contents of this file are subject to the Common Public Attribution License
8 * Version 1.0 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 * http://lass.sourceforge.net/cpal-license. The License is based on the
11 * Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
12 * use of software over a computer network and provide for limited attribution for
13 * the Original Developer. In addition, Exhibit A has been modified to be consistent
14 * with Exhibit B.
15 *
16 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
17 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
18 * language governing rights and limitations under the License.
19 *
20 * The Original Code is LASS - Library of Assembled Shared Sources.
21 *
22 * The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
23 * The Original Developer is the Initial Developer.
24 *
25 * All portions of the code written by the Initial Developer are:
26 * Copyright (C) 2004-2011 the Initial Developer.
27 * All Rights Reserved.
28 *
29 * Contributor(s):
30 *
31 * Alternatively, the contents of this file may be used under the terms of the
32 * GNU General Public License Version 2 or later (the GPL), in which case the
33 * provisions of GPL are applicable instead of those above. If you wish to allow use
34 * of your version of this file only under the terms of the GPL and not to allow
35 * others to use your version of this file under the CPAL, indicate your decision by
36 * deleting the provisions above and replace them with the notice and other
37 * provisions required by the GPL License. If you do not delete the provisions above,
38 * a recipient may use your version of this file under either the CPAL or the GPL.
39 *
40 * *** END LICENSE INFORMATION ***
41 */
42
43namespace lass
44{
45namespace stde
46{
47
48// --- public --------------------------------------------------------------------------------------
49
50template <typename T, typename VA>
51lass_allocator<T, VA>::lass_allocator() noexcept
52{
53}
54
55
56
57template <typename T, typename VA>
58lass_allocator<T, VA>::lass_allocator(const lass_allocator& other) noexcept:
59 VA(static_cast<const VA&>(other))
60{
61}
62
63
64
65template <typename T, typename VA>
66template <typename U>
67lass_allocator<T, VA>::lass_allocator(const lass_allocator<U, VA>& other) noexcept:
68 VA(static_cast<const VA&>(other))
69{
70}
71
72
73
74template <typename T, typename VA>
75lass_allocator<T, VA>::~lass_allocator() noexcept
76{
77}
78
79
80
81template <typename T, typename VA>
82typename lass_allocator<T, VA>::pointer
83lass_allocator<T, VA>::address(reference x) const
84{
85 return &x;
86}
87
88
89
90template <typename T, typename VA>
91typename lass_allocator<T, VA>::const_pointer
92lass_allocator<T, VA>::address(const_reference x) const
93{
94 return &x;
95}
96
97
98
99template <typename T, typename VA>
100typename lass_allocator<T, VA>::pointer
101lass_allocator<T, VA>::allocate(size_type n, typename lass_allocator<void, VA>::pointer)
102{
103 const size_type size = n * sizeof(T);
104 return static_cast<pointer>(VA::allocate(size));
105}
106
107
108
109template <typename T, typename VA>
110void lass_allocator<T, VA>::deallocate(pointer p, size_type n)
111{
112 const size_type size = n * sizeof(T);
113 VA::deallocate(p, size);
114}
115
116
117
118template <typename T, typename VA>
119typename lass_allocator<T, VA>::size_type
120lass_allocator<T, VA>::max_size() const noexcept
121{
122 // this is only a rough estimation ...
123 const size_type n = size_type(-1) / sizeof(T);
124 return n > 0 ? n : 1;
125}
126
127
128template <typename T, typename VA>
129void lass_allocator<T, VA>::construct(pointer p, const T& val)
130{
131 new(p) T(val);
132}
133
134
135
136template <typename T, typename VA>
137void lass_allocator<T, VA>::destroy(pointer p)
138{
139 p->~T();
140}
141
142
143
144// --- protected functions -------------------------------------------------------------------------
145
146
147
148
149// --- private functions ---------------------------------------------------------------------------
150
151
152
153// --- free functions ------------------------------------------------------------------------------
154
155template <typename T1, typename T2, typename VA>
156bool operator==(const lass_allocator<T1, VA>&, const lass_allocator<T2, VA>&)
157{
158 return true;
159}
160
161
162
163template <typename T1, typename T2, typename VA>
164bool operator!=(const lass_allocator<T1, VA>&, const lass_allocator<T2, VA>&)
165{
166 return false;
167}
168
169
170
171}
172
173}
174
175// EOF
an adaptor to use an lass::util Allocator as a replacement for std::allocator
lass extensions to the standard library
Library for Assembled Shared Sources.
Definition config.h:53