NIM 跨平台 C++ SDK
载入中...
搜索中...
未找到
ne_stl_continuous_container.h
浏览该文件的文档.
1#ifndef NE_STL_INCLUDENE_STL_CONTINUOUS_CONTAINER_
2#define NE_STL_INCLUDENE_STL_CONTINUOUS_CONTAINER_
3#include <algorithm>
4#include <stdexcept>
5#include <vector>
6#include "ne_stl_build.h"
7#include "ne_stl_iterator.h"
8#include "ne_stl_memory.h"
9
10namespace nstd {
11
12template <class TElement,
13 element_malloc_fun_t<TElement> _malloc = memory::safe_malloc_container_element<TElement>,
14 element_delete_fun_t<TElement> _delete = memory::safe_delete_container_element<TElement>>
16public:
17 using size_type = std::size_t;
18 using value_type = TElement;
19 using pointer = TElement*;
20
21public:
23 : data_(nullptr)
24 , malloc_fun_(_malloc)
25 , delete_fun_(_delete)
26 , length_(0)
27 , cap_length_(0)
29 static_assert(std::is_standard_layout<TElement>::value, "TElement should standard layout");
31 _set_length(0);
32 }
34 : data_(nullptr)
37 , length_(0)
38 , cap_length_(0)
40 static_assert(std::is_standard_layout<TElement>::value, "TElement should standard layout");
41 _append(other.data_, other.length_);
42 }
44 data_ = other.data_;
45 malloc_fun_ = other.malloc_fun_;
46 delete_fun_ = other.delete_fun_;
47 length_ = other.length_;
48 cap_length_ = other.cap_length_;
49 increase_step_length_ = other.increase_step_length_;
50 other.data_ = nullptr;
51 other.malloc_fun_ = nullptr; // not set to _malloc because the implementation may be different across modules
52 other.delete_fun_ = nullptr; // same as above
53 other.length_ = 0;
54 other.cap_length_ = 0;
55 other.increase_step_length_ = container_increase_step::value;
56 }
57 _continuous_container(const _continuous_container& other, std::size_t pos, std::size_t len = container_npos::value)
58 : data_(nullptr)
61 , length_(0)
62 , cap_length_(0)
64 static_assert(std::is_standard_layout<TElement>::value, "TElement should standard layout");
65 append(other.data_, pos, len);
66 }
67 _continuous_container(const TElement* s, std::size_t n)
68 : data_(nullptr)
69 , malloc_fun_(_malloc)
70 , delete_fun_(_delete)
71 , length_(0)
72 , cap_length_(0)
74 static_assert(std::is_standard_layout<TElement>::value, "TElement should standard layout");
75 _append(n, s);
76 }
77 _continuous_container(std::size_t n, const TElement& s) { append(n, s); }
79 : data_(nullptr)
80 , malloc_fun_(_malloc)
81 , delete_fun_(_delete)
82 , length_(0)
83 , cap_length_(0)
85 static_assert(std::is_standard_layout<TElement>::value, "TElement should standard layout");
86 append(first, second);
87 }
88 template <typename T>
89 _continuous_container(const std::vector<T>& other)
90 : data_(nullptr)
91 , malloc_fun_(_malloc)
92 , delete_fun_(_delete)
93 , length_(0)
94 , cap_length_(0)
96 for (auto it : other) {
97 this->push_back(it);
98 }
99 }
100 _continuous_container(const std::vector<TElement>& other)
101 : data_(nullptr)
102 , malloc_fun_(_malloc)
103 , delete_fun_(_delete)
104 , length_(0)
105 , cap_length_(0)
107 for (auto it : other) {
108 this->push_back(it);
109 }
110 }
111 _continuous_container(std::initializer_list<TElement> init)
112 : data_(nullptr)
113 , malloc_fun_(_malloc)
114 , delete_fun_(_delete)
115 , length_(0)
116 , cap_length_(0)
118 for (auto it : init) {
119 this->push_back(it);
120 }
121 }
122
123public:
130
137
141
142private:
147 if (first.current().first_ != second.current().first_) {
148 throw;
149 }
150 if (first.current().pos_ > second.current().pos_) {
151 throw;
152 }
153 return second.current().pos_ - first.current().pos_;
154 }
155
156public:
158 if (this != &other) {
159 _set_length(0);
160 _append(other.data_, other.length_);
161 }
162 return *this;
163 }
165 if (this != &other) {
167 data_ = other.data_;
168 length_ = other.length_;
169 cap_length_ = other.cap_length_;
170 other.data_ = nullptr;
171 other.length_ = 0;
172 other.cap_length_ = 0;
173 }
174 return *this;
175 }
176
177 template <typename T>
178 _continuous_container& operator=(const std::vector<T>& other) {
179 _continuous_container templateContainer;
180 for (auto it : other) {
181 templateContainer.push_back(it);
182 }
183 *this = templateContainer;
184 return *this;
185 }
186 operator std::vector<TElement>() {
187 std::vector<TElement> ret;
188 for (auto it : *this) {
189 ret.emplace_back(it);
190 }
191 return ret;
192 }
193 operator std::vector<TElement>() const {
194 std::vector<TElement> ret;
195 for (auto it : *this) {
196 ret.emplace_back(it);
197 }
198 return ret;
199 }
200 template <class TSTDVectorItem>
201 operator std::vector<TSTDVectorItem>() {
202 std::vector<TSTDVectorItem> ret;
203 for (auto it : *this) {
204 ret.emplace_back(it);
205 }
206 return ret;
207 }
208 template <class TSTDVectorItem>
209 operator std::vector<TSTDVectorItem>() const {
210 std::vector<TSTDVectorItem> ret;
211 for (auto it : *this) {
212 ret.emplace_back(it);
213 }
214 return ret;
215 }
216
217 std::string to_string() const {
218 if (length_ == 0)
219 return "";
220 std::string ret;
221 for (auto iter : *this) {
222 ret += iter;
223 ret += ',';
224 }
225 ret.pop_back();
226 return ret;
227 }
228
229 bool element_equal(const _continuous_container& other) const {
230 if (length_ != other.length_)
231 return false;
232 for (std::size_t index = 0; index < length_; ++index) {
233 if (find(other[index]) == end()) {
234 return false;
235 }
236 }
237 return true;
238 }
239
240public:
243 length_ = 0;
244 cap_length_ = 0;
246 }
247
248public:
249 const TElement& operator[](std::size_t i) const { return *(data_ + i); }
250 TElement& operator[](std::size_t i) { return *(data_ + i); }
251 const TElement& at(std::size_t i) const {
252 if (i < 0 || length_ <= i)
253 throw;
254 return operator[](i);
255 }
256 TElement& at(std::size_t i) {
257 if (i < 0 || length_ <= i)
258 throw;
259 return operator[](i);
260 }
261 const TElement& front() const { return operator[](0); }
262 TElement& front() { return operator[](0); }
263 const TElement& back() const { return operator[](length_ - 1); }
264 TElement& back() { return operator[](length_ - 1); }
265
266public:
268 _append(other.data_, other.length_);
269 return *this;
270 }
272 _append(&element, 1);
273 return *this;
274 }
276 _append(other.data_, other.length_);
277 return *this;
278 }
279 _continuous_container& append(const _continuous_container& other, std::size_t subpos, std::size_t sublen = container_npos::value) {
280 sublen = _getLength(other, subpos, sublen);
281 TElement* buffer = nullptr;
282 _substr(buffer, other.data_, subpos, sublen);
283 _append(buffer, sublen);
284 _delete_data(buffer);
285 return *this;
286 }
287 _continuous_container& append(const TElement elements) {
288 _append(&elements, 1);
289 return *this;
290 }
291 _continuous_container& append(std::size_t n, TElement element) {
292 TElement* buffer = nullptr;
293 _alloc_buffer(buffer, n, element);
294 _append(buffer, n);
295 _delete_data(buffer);
296 return *this;
297 }
299 const std::size_t n = _getLength(first, second);
300 if (n != 0) {
301 TElement* buffer = nullptr;
302 _alloc_buffer(buffer, n, first, second);
303 _append(buffer, n);
304 _delete_data(buffer);
305 }
306 return *this;
307 }
308 _continuous_container& push_back(TElement element) {
309 _append(&element, 1);
310 return *this;
311 }
312 _continuous_container& erase(std::size_t pos = 0, std::size_t len = container_npos::value) {
313 _erase(pos, len);
314 return *this;
315 }
317 _erase(p.current().pos_, 1);
318 return p.current();
319 }
321 _erase(first.current().pos_, _getLength(first, last));
322 return first.current();
323 }
325 _continuous_container temp = std::move(*this);
326 *this = std::move(other);
327 other = std::move(temp);
328 }
337 template <class InputIt>
338 void insert(iterator pos, InputIt first, InputIt last) {
339 if (pos != end()) {
340 throw std::runtime_error("Only inserting to end is supported");
341 }
342 append(first, last);
343 }
351 void insert(const_iterator pos, const TElement& value) {
352 if (pos != cend()) {
353 throw std::runtime_error("Only inserting to end is supported");
354 }
355 append(value);
356 }
357
358 bool operator==(const _continuous_container& other) const { return std::equal(begin(), end(), other.begin(), other.end()); }
359 bool operator!=(const _continuous_container& other) const { return !operator==(other); }
360
361 nstd::iterator<TElement> find(const TElement& element) { return std::find(begin(), end(), element); }
362 nstd::const_iterator<TElement> find(const TElement& element) const { return std::find(begin(), end(), element); }
363 bool contains(const _continuous_container& other) const {
364 if (other.length_ > length_) {
365 return false;
366 }
367 return std::all_of(other.begin(), other.end(), [this](const TElement& element) {
368 return find(element) != end();
369 });
370 }
371
372private:
373 inline void _append(const TElement other) { _append(&other, 1); }
374 void _append(const TElement* other, std::size_t n) {
375 if (!other || n == 0)
376 return;
378 for (std::size_t i = 0; i < n; ++i)
379 operator[](length_ + i) = other[i];
380 _set_length(length_ + n);
381 }
382 void _substr(TElement*& buffer, const TElement* other, std::size_t pos = 0, std::size_t len = container_npos::value) const {
383 if (other == nullptr) {
384 throw;
385 }
386 _alloc_buffer(buffer, len);
387 for (std::size_t i = 0; i < len; ++i)
388 buffer[i] = other[pos + i];
389 }
390 void _erase(std::size_t pos, std::size_t size) {
391 size = _getLength(*this, pos, size);
392 for (std::size_t i = pos + size; i < length_; ++i)
393 operator[](i - size) = operator[](i);
395 }
396 std::size_t _getLength(const _continuous_container& str, std::size_t pos, std::size_t len = container_npos::value) const {
397 if (len == container_npos::value)
398 len = length_ - pos;
399 if (pos + len > str.length_)
400 throw;
401 return len;
402 }
403
404public:
405 const TElement* data() const { return data_; }
406
407public:
410 inline std::size_t size() const { return length_; }
411 std::size_t max_size() const { return container_npos::value - 1; }
412 void resize(std::size_t n) {
413 if (length_ == n)
414 return;
415 if (length_ < n) {
416 _set_length(n);
417 return;
418 }
419 _clear_str(n);
420 }
421 void resize(std::size_t n, TElement c) {
422 if (length_ == n)
423 return;
424 if (length_ < n) {
425 std::size_t pos = length_;
426 _set_length(n);
427 _fill_str(data_, length_, pos, c);
428 return;
429 }
430 _clear_str(n);
431 }
432 std::size_t capacity() const { return cap_length_; }
433 void reserve(std::size_t n = 0) {
434 if (cap_length_ == n)
435 return;
436 if (cap_length_ < n) {
437 _set_capacity(n);
438 return;
439 }
440 if (cap_length_ / 2 > length_) {
442 }
443 }
444 void clear() {
445 _clear_str(0, false);
447 }
448 bool empty() const { return length_ ? false : true; }
450
451private:
452 void _set_length(const std::size_t len) {
453 if (length_ > len)
454 _clear_str(len);
455 else if (cap_length_ < len)
457 length_ = len;
458 }
459 void _set_capacity(const std::size_t cap) {
460 if (cap_length_ == cap && data_)
461 return;
462 if (cap < length_)
463 return;
464 cap_length_ = cap;
465 TElement* buffer = data_;
466 data_ = nullptr;
468 if (buffer) {
469 for (std::size_t i = 0; i < length_; ++i)
470 operator[](i) = buffer[i];
471 _delete_data(buffer);
472 }
473 }
474 void _increase_capacity(const std::size_t cap) {
475 if (cap_length_ > cap && data_)
476 return;
477 std::size_t _cap = cap_length_;
478 while (_cap <= cap)
479 _cap += increase_step_length_;
481 _set_capacity(_cap);
482 }
483 void _decrease_capacity(const std::size_t cap) {
484 if (cap_length_ < cap)
485 return;
488 _set_capacity(cap);
489 }
490 void _alloc_buffer(TElement*& buffer, const std::size_t n) const {
491 if (buffer != 0)
492 throw;
493 if (n > 0) {
494 buffer = _new_data(n);
495 }
496 }
497 void _alloc_buffer(TElement*& buffer, const std::size_t n, const TElement& element) const {
498 _alloc_buffer(buffer, n);
499 std::size_t begin = 0;
500 while (begin != n)
501 buffer[begin++] = element;
502 }
503
504 void _alloc_buffer(TElement*& buffer,
505 const std::size_t n,
507 const nstd::const_iterator<TElement> i2) const {
508 _alloc_buffer(buffer, n);
510 for (std::size_t i = 0; i < n; ++i)
511 buffer[i] = *begin++;
512 }
513 void _clear_str(const std::size_t pos, bool destruct = true) {
514 std::size_t begin = pos;
515 TElement* begin_data = data_ + pos;
516 while (begin++ != length_) {
517 auto _temp = begin_data++;
518 if (destruct) {
519 _temp->~TElement();
520 }
521 // memset(_temp, 0, sizeof(TElement));
522 }
523 length_ = pos;
524 // increase_step_length_ = container_increase_step::value;
525 }
526 TElement* _new_data(std::size_t count) const {
527 if (count <= 0)
528 return nullptr;
529 if (malloc_fun_ != nullptr)
530 return malloc_fun_(count);
531 else
532 return memory::safe_malloc_container_element<TElement>(count);
533 }
534 void _delete_data(TElement*& data) {
535 if (data == nullptr)
536 return;
537 if (delete_fun_ != nullptr) {
539 } else {
540 memory::safe_delete_container_element<TElement>(data);
541 }
542 }
543
544private:
545 TElement* data_{nullptr};
548 std::size_t length_{0};
549 std::size_t cap_length_{0};
551};
552template <class TElement,
553 element_malloc_fun_t<TElement> _malloc = memory::safe_malloc_container_element<TElement>,
554 element_delete_fun_t<TElement> _delete = memory::safe_delete_container_element<TElement>>
556
557template <class TElement,
558 element_malloc_fun_t<TElement> _malloc = memory::safe_malloc_container_element<TElement>,
559 element_delete_fun_t<TElement> _delete = memory::safe_delete_container_element<TElement>>
561} // namespace nstd
562
563#endif // !NE_STL_INCLUDENE_STL_CONTINUOUS_CONTAINER_
Definition: ne_stl_iterator.h:22
nstd::iterator_type< TElement > & current()
Definition: ne_stl_iterator.h:32
Definition: ne_stl_iterator.h:159
Definition: ne_stl_continuous_container.h:15
void _append(const TElement other)
Definition: ne_stl_continuous_container.h:373
_continuous_container & append(const _continuous_container &other, std::size_t subpos, std::size_t sublen=container_npos::value)
Definition: ne_stl_continuous_container.h:279
void set_element_delete_function(element_delete_fun_t< TElement > function)
Definition: ne_stl_continuous_container.h:409
nstd::const_iterator< TElement > cend() const
Definition: ne_stl_continuous_container.h:129
nstd::reverse_iterator< TElement > rend()
Definition: ne_stl_continuous_container.h:133
std::size_t cap_length_
Definition: ne_stl_continuous_container.h:549
_continuous_container(const _continuous_container &other)
Definition: ne_stl_continuous_container.h:33
std::string to_string() const
Definition: ne_stl_continuous_container.h:217
nstd::iterator_type< TElement > _rbegin() const
Definition: ne_stl_continuous_container.h:144
void _alloc_buffer(TElement *&buffer, const std::size_t n, const nstd::const_iterator< TElement > i1, const nstd::const_iterator< TElement > i2) const
Definition: ne_stl_continuous_container.h:504
void _decrease_capacity(const std::size_t cap)
Definition: ne_stl_continuous_container.h:483
const TElement & at(std::size_t i) const
Definition: ne_stl_continuous_container.h:251
TElement & operator[](std::size_t i)
Definition: ne_stl_continuous_container.h:250
const TElement * data() const
Definition: ne_stl_continuous_container.h:405
void swap(_continuous_container &other)
Definition: ne_stl_continuous_container.h:324
_continuous_container(std::size_t n, const TElement &s)
Definition: ne_stl_continuous_container.h:77
TElement * data_
Definition: ne_stl_continuous_container.h:545
~_continuous_container()
Definition: ne_stl_continuous_container.h:241
nstd::const_reverse_iterator< TElement > rend() const
Definition: ne_stl_continuous_container.h:134
const TElement & operator[](std::size_t i) const
Definition: ne_stl_continuous_container.h:249
_continuous_container(std::initializer_list< TElement > init)
Definition: ne_stl_continuous_container.h:111
bool element_equal(const _continuous_container &other) const
Definition: ne_stl_continuous_container.h:229
_continuous_container()
Definition: ne_stl_continuous_container.h:22
nstd::iterator< TElement > begin()
Definition: ne_stl_continuous_container.h:124
bool contains(const _continuous_container &other) const
Definition: ne_stl_continuous_container.h:363
std::size_t size() const
Definition: ne_stl_continuous_container.h:410
TElement * pointer
Definition: ne_stl_continuous_container.h:19
void shrink_to_fit()
Definition: ne_stl_continuous_container.h:449
std::size_t _getLength(const _continuous_container &str, std::size_t pos, std::size_t len=container_npos::value) const
Definition: ne_stl_continuous_container.h:396
nstd::const_reverse_iterator< TElement > rbegin() const
Definition: ne_stl_continuous_container.h:132
std::size_t capacity() const
Definition: ne_stl_continuous_container.h:432
void _erase(std::size_t pos, std::size_t size)
Definition: ne_stl_continuous_container.h:390
const TElement & back() const
Definition: ne_stl_continuous_container.h:263
void resize(std::size_t n, TElement c)
Definition: ne_stl_continuous_container.h:421
void _set_length(const std::size_t len)
Definition: ne_stl_continuous_container.h:452
void _append(const TElement *other, std::size_t n)
Definition: ne_stl_continuous_container.h:374
element_malloc_fun_t< TElement > malloc_fun_
Definition: ne_stl_continuous_container.h:546
nstd::iterator< TElement > erase(nstd::const_iterator< TElement > p)
Definition: ne_stl_continuous_container.h:316
void _clear_str(const std::size_t pos, bool destruct=true)
Definition: ne_stl_continuous_container.h:513
nstd::const_iterator< TElement > end() const
Definition: ne_stl_continuous_container.h:127
_continuous_container & operator=(const std::vector< T > &other)
Definition: ne_stl_continuous_container.h:178
_continuous_container & erase(std::size_t pos=0, std::size_t len=container_npos::value)
Definition: ne_stl_continuous_container.h:312
_continuous_container & append(const nstd::const_iterator< TElement > first, const nstd::const_iterator< TElement > second)
Definition: ne_stl_continuous_container.h:298
bool empty() const
Definition: ne_stl_continuous_container.h:448
bool operator==(const _continuous_container &other) const
Definition: ne_stl_continuous_container.h:358
void insert(iterator pos, InputIt first, InputIt last)
The function type imitates the STL std::vector: https://en.cppreference.com/w/cpp/container/vector/in...
Definition: ne_stl_continuous_container.h:338
void _alloc_buffer(TElement *&buffer, const std::size_t n, const TElement &element) const
Definition: ne_stl_continuous_container.h:497
nstd::const_iterator< TElement > cbegin() const
Definition: ne_stl_continuous_container.h:128
void insert(const_iterator pos, const TElement &value)
The function type differs the STL std::vector in the return type: https://en.cppreference....
Definition: ne_stl_continuous_container.h:351
_continuous_container(const std::vector< TElement > &other)
Definition: ne_stl_continuous_container.h:100
_continuous_container & operator+=(const _continuous_container &other)
Definition: ne_stl_continuous_container.h:267
void _increase_capacity(const std::size_t cap)
Definition: ne_stl_continuous_container.h:474
nstd::iterator_type< TElement > _ibegin() const
Definition: ne_stl_continuous_container.h:143
_continuous_container(_continuous_container &&other)
Definition: ne_stl_continuous_container.h:43
nstd::iterator< TElement > find(const TElement &element)
Definition: ne_stl_continuous_container.h:361
_continuous_container(const _continuous_container &other, std::size_t pos, std::size_t len=container_npos::value)
Definition: ne_stl_continuous_container.h:57
_continuous_container(const nstd::const_iterator< TElement > first, const nstd::const_iterator< TElement > second)
Definition: ne_stl_continuous_container.h:78
_continuous_container & append(std::size_t n, TElement element)
Definition: ne_stl_continuous_container.h:291
nstd::const_reverse_iterator< TElement > crbegin() const
Definition: ne_stl_continuous_container.h:135
void _alloc_buffer(TElement *&buffer, const std::size_t n) const
Definition: ne_stl_continuous_container.h:490
nstd::const_reverse_iterator< TElement > crend() const
Definition: ne_stl_continuous_container.h:136
TElement & front()
Definition: ne_stl_continuous_container.h:262
const TElement & front() const
Definition: ne_stl_continuous_container.h:261
void _set_capacity(const std::size_t cap)
Definition: ne_stl_continuous_container.h:459
_continuous_container & push_back(TElement element)
Definition: ne_stl_continuous_container.h:308
_continuous_container & operator+=(TElement element)
Definition: ne_stl_continuous_container.h:271
_continuous_container & append(const _continuous_container &other)
Definition: ne_stl_continuous_container.h:275
_continuous_container & append(const TElement elements)
Definition: ne_stl_continuous_container.h:287
void _substr(TElement *&buffer, const TElement *other, std::size_t pos=0, std::size_t len=container_npos::value) const
Definition: ne_stl_continuous_container.h:382
std::size_t increase_step_length_
Definition: ne_stl_continuous_container.h:550
std::size_t max_size() const
Definition: ne_stl_continuous_container.h:411
nstd::const_iterator< TElement > find(const TElement &element) const
Definition: ne_stl_continuous_container.h:362
void set_element_malloc_function(element_malloc_fun_t< TElement > function)
Definition: ne_stl_continuous_container.h:408
nstd::iterator_type< TElement > _end() const
Definition: ne_stl_continuous_container.h:145
nstd::iterator< TElement > end()
Definition: ne_stl_continuous_container.h:126
TElement * _new_data(std::size_t count) const
Definition: ne_stl_continuous_container.h:526
nstd::reverse_iterator< TElement > rbegin()
Definition: ne_stl_continuous_container.h:131
nstd::const_iterator< TElement > begin() const
Definition: ne_stl_continuous_container.h:125
element_delete_fun_t< TElement > delete_fun_
Definition: ne_stl_continuous_container.h:547
std::size_t length_
Definition: ne_stl_continuous_container.h:548
_continuous_container(const std::vector< T > &other)
Definition: ne_stl_continuous_container.h:89
TElement & back()
Definition: ne_stl_continuous_container.h:264
bool operator!=(const _continuous_container &other) const
Definition: ne_stl_continuous_container.h:359
void _delete_data(TElement *&data)
Definition: ne_stl_continuous_container.h:534
void reserve(std::size_t n=0)
Definition: ne_stl_continuous_container.h:433
_continuous_container & operator=(_continuous_container &&other)
Definition: ne_stl_continuous_container.h:164
std::size_t _getLength(const nstd::const_iterator< TElement > first, const nstd::const_iterator< TElement > second)
Definition: ne_stl_continuous_container.h:146
TElement & at(std::size_t i)
Definition: ne_stl_continuous_container.h:256
_continuous_container(const TElement *s, std::size_t n)
Definition: ne_stl_continuous_container.h:67
TElement value_type
Definition: ne_stl_continuous_container.h:18
nstd::iterator< TElement > erase(nstd::const_iterator< TElement > first, nstd::const_iterator< TElement > last)
Definition: ne_stl_continuous_container.h:320
_continuous_container & operator=(const _continuous_container &other)
Definition: ne_stl_continuous_container.h:157
void clear()
Definition: ne_stl_continuous_container.h:444
std::size_t size_type
Definition: ne_stl_continuous_container.h:17
void resize(std::size_t n)
Definition: ne_stl_continuous_container.h:412
Definition: ne_stl_iterator.h:108
Definition: ne_stl_iterator.h:242
Definition: ne_stl_any.h:7
void(*)(TElement *&) element_delete_fun_t
Definition: ne_stl_memory.h:13
TElement *(*)(std::size_t) element_malloc_fun_t
Definition: ne_stl_memory.h:10
#define false
Definition: stdbool.h:33
Definition: ne_stl_value_def.h:12
static const T value
Definition: ne_stl_type_traits.h:10
Definition: ne_stl_iterator.h:9
Definition: ne_stl_bind.h:132