Embedded Template Library 1.0
Loading...
Searching...
No Matches
variant_pool_cpp03.h
1/******************************************************************************
2The MIT License(MIT)
3
4Embedded Template Library.
5https://github.com/ETLCPP/etl
6https://www.etlcpp.com
7
8Copyright(c) 2026 John Wellbelove
9
10Permission is hereby granted, free of charge, to any person obtaining a copy
11of this software and associated documentation files(the "Software"), to deal
12in the Software without restriction, including without limitation the rights
13to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
14copies of the Software, and to permit persons to whom the Software is
15furnished to do so, subject to the following conditions :
16
17The above copyright notice and this permission notice shall be included in all
18copies or substantial portions of the Software.
19
20THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
23AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26SOFTWARE.
27******************************************************************************/
28
29//***************************************************************************
30// THIS FILE HAS BEEN AUTO GENERATED. DO NOT EDIT THIS FILE.
31//***************************************************************************
32
33//***************************************************************************
34template <size_t MAX_SIZE_,
35 typename T1,
36 typename T2 = void,
37 typename T3 = void,
38 typename T4 = void,
39 typename T5 = void,
40 typename T6 = void,
41 typename T7 = void,
42 typename T8 = void,
43 typename T9 = void,
44 typename T10 = void,
45 typename T11 = void,
46 typename T12 = void,
47 typename T13 = void,
48 typename T14 = void,
49 typename T15 = void,
50 typename T16 = void>
52 : public etl::generic_pool<etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::size,
53 etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::alignment,
54 MAX_SIZE_>
55{
56public:
57
59 etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::alignment,
60 MAX_SIZE_> base_t;
61
62 static const size_t MAX_SIZE = MAX_SIZE_;
63
64 //*************************************************************************
66 //*************************************************************************
68 {
69 }
70
71#if ETL_CPP11_NOT_SUPPORTED || ETL_USING_STLPORT
72 //*************************************************************************
74 //*************************************************************************
75 template <typename T>
76 T* create()
77 {
78 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
79
80 return base_t::template create<T>();
81 }
82
83 //*************************************************************************
85 //*************************************************************************
86 template <typename T, typename TP1>
87 T* create(const TP1& p1)
88 {
89 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
90
91 return base_t::template create<T>(p1);
92 }
93
94 //*************************************************************************
96 //*************************************************************************
97 template <typename T, typename TP1, typename TP2>
98 T* create(const TP1& p1, const TP2& p2)
99 {
100 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
101
102 return base_t::template create<T>(p1, p2);
103 }
104
105 //*************************************************************************
107 //*************************************************************************
108 template <typename T, typename TP1, typename TP2, typename TP3>
109 T* create(const TP1& p1, const TP2& p2, const TP3& p3)
110 {
111 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
112
113 return base_t::template create<T>(p1, p2, p3);
114 }
115
116 //*************************************************************************
118 //*************************************************************************
119 template <typename T, typename TP1, typename TP2, typename TP3, typename TP4>
120 T* create(const TP1& p1, const TP2& p2, const TP3& p3, const TP4& p4)
121 {
122 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
123
124 return base_t::template create<T>(p1, p2, p3, p4);
125 }
126#else
127 //*************************************************************************
129 //*************************************************************************
130 template <typename T, typename... Args>
131 T* create(Args && ... args)
132 {
133 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
134
135 return base_t::template create<T>(etl::forward<Args>(args)...);
136 }
137#endif
138
139 //*************************************************************************
141 //*************************************************************************
142 template <typename T>
143 void destroy(const T* const p)
144 {
145 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value ||
146 etl::is_base_of<T, T1>::value ||
147 etl::is_base_of<T, T2>::value ||
148 etl::is_base_of<T, T3>::value ||
149 etl::is_base_of<T, T4>::value ||
150 etl::is_base_of<T, T5>::value ||
151 etl::is_base_of<T, T6>::value ||
152 etl::is_base_of<T, T7>::value ||
153 etl::is_base_of<T, T8>::value ||
154 etl::is_base_of<T, T9>::value ||
155 etl::is_base_of<T, T10>::value ||
156 etl::is_base_of<T, T11>::value ||
157 etl::is_base_of<T, T12>::value ||
158 etl::is_base_of<T, T13>::value ||
159 etl::is_base_of<T, T14>::value ||
160 etl::is_base_of<T, T15>::value ||
161 etl::is_base_of<T, T16>::value), "Invalid type");
162
163 base_t::destroy(p);
164 }
165
166 //*************************************************************************
168 //*************************************************************************
169 size_t max_size() const
170 {
171 return MAX_SIZE;
172 }
173
174private:
175
176 variant_pool(const variant_pool&) ETL_DELETE;
177 variant_pool& operator=(const variant_pool&) ETL_DELETE;
178};
179
180//***************************************************************************
181template <typename T1,
182 typename T2 = void,
183 typename T3 = void,
184 typename T4 = void,
185 typename T5 = void,
186 typename T6 = void,
187 typename T7 = void,
188 typename T8 = void,
189 typename T9 = void,
190 typename T10 = void,
191 typename T11 = void,
192 typename T12 = void,
193 typename T13 = void,
194 typename T14 = void,
195 typename T15 = void,
196 typename T16 = void>
198 : public etl::generic_pool_ext<etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::size,
199 etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::alignment>
200{
201public:
202
204 etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::alignment> base_t;
205
206 //*************************************************************************
208 //*************************************************************************
209 variant_pool_ext(typename base_t::element * buffer, size_t size)
210 : base_t(buffer, size)
211 {
212 }
213
214#if ETL_CPP11_NOT_SUPPORTED || ETL_USING_STLPORT
215 //*************************************************************************
217 //*************************************************************************
218 template <typename T>
219 T* create()
220 {
221 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
222
223 return base_t::template create<T>();
224 }
225
226 //*************************************************************************
228 //*************************************************************************
229 template <typename T, typename TP1>
230 T* create(const TP1& p1)
231 {
232 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
233
234 return base_t::template create<T>(p1);
235 }
236
237 //*************************************************************************
239 //*************************************************************************
240 template <typename T, typename TP1, typename TP2>
241 T* create(const TP1& p1, const TP2& p2)
242 {
243 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
244
245 return base_t::template create<T>(p1, p2);
246 }
247
248 //*************************************************************************
250 //*************************************************************************
251 template <typename T, typename TP1, typename TP2, typename TP3>
252 T* create(const TP1& p1, const TP2& p2, const TP3& p3)
253 {
254 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
255
256 return base_t::template create<T>(p1, p2, p3);
257 }
258
259 //*************************************************************************
261 //*************************************************************************
262 template <typename T, typename TP1, typename TP2, typename TP3, typename TP4>
263 T* create(const TP1& p1, const TP2& p2, const TP3& p3, const TP4& p4)
264 {
265 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
266
267 return base_t::template create<T>(p1, p2, p3, p4);
268 }
269#else
270 //*************************************************************************
272 //*************************************************************************
273 template <typename T, typename... Args>
274 T* create(Args && ... args)
275 {
276 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value), "Unsupported type");
277
278 return base_t::template create<T>(etl::forward<Args>(args)...);
279 }
280#endif
281
282 //*************************************************************************
284 //*************************************************************************
285 template <typename T>
286 void destroy(const T* const p)
287 {
288 ETL_STATIC_ASSERT((etl::is_one_of<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value ||
289 etl::is_base_of<T, T1>::value ||
290 etl::is_base_of<T, T2>::value ||
291 etl::is_base_of<T, T3>::value ||
292 etl::is_base_of<T, T4>::value ||
293 etl::is_base_of<T, T5>::value ||
294 etl::is_base_of<T, T6>::value ||
295 etl::is_base_of<T, T7>::value ||
296 etl::is_base_of<T, T8>::value ||
297 etl::is_base_of<T, T9>::value ||
298 etl::is_base_of<T, T10>::value ||
299 etl::is_base_of<T, T11>::value ||
300 etl::is_base_of<T, T12>::value ||
301 etl::is_base_of<T, T13>::value ||
302 etl::is_base_of<T, T14>::value ||
303 etl::is_base_of<T, T15>::value ||
304 etl::is_base_of<T, T16>::value), "Invalid type");
305
306 base_t::destroy(p);
307 }
308
309 //*************************************************************************
311 //*************************************************************************
312 size_t max_size() const
313 {
314 return base_t::max_size();
315 }
316
317private:
318
319 variant_pool_ext(const variant_pool_ext&) ETL_DELETE;
320 variant_pool_ext& operator=(const variant_pool_ext&) ETL_DELETE;
321};
Definition variant_pool_cpp03.h:200
size_t max_size() const
Returns the maximum number of items in the variant_pool.
Definition variant_pool_cpp03.h:312
variant_pool_ext(typename base_t::element *buffer, size_t size)
Default constructor.
Definition variant_pool_cpp03.h:209
T * create(Args &&... args)
Creates the object from a type. Variadic parameter constructor.
Definition variant_pool_cpp03.h:274
void destroy(const T *const p)
Destroys the object.
Definition variant_pool_cpp03.h:286
Definition variant_pool_cpp03.h:55
void destroy(const T *const p)
Destroys the object.
Definition variant_pool_cpp03.h:143
T * create(Args &&... args)
Creates the object from a type. Variadic parameter constructor.
Definition variant_pool_cpp03.h:131
size_t max_size() const
Returns the maximum number of items in the variant_pool.
Definition variant_pool_cpp03.h:169
variant_pool()
Default constructor.
Definition variant_pool_cpp03.h:67
size_t size() const
Returns the number of allocated items in the pool.
Definition ipool.h:522
Definition generic_pool.h:56
Definition generic_pool.h:216