Embedded Template Library 1.0
Loading...
Searching...
No Matches
reference_flat_set.h
Go to the documentation of this file.
1
2
3/******************************************************************************
4The MIT License(MIT)
5
6Embedded Template Library.
7https://github.com/ETLCPP/etl
8https://www.etlcpp.com
9
10Copyright(c) 2017 John Wellbelove
11
12Permission is hereby granted, free of charge, to any person obtaining a copy
13of this software and associated documentation files(the "Software"), to deal
14in the Software without restriction, including without limitation the rights
15to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
16copies of the Software, and to permit persons to whom the Software is
17furnished to do so, subject to the following conditions :
18
19The above copyright notice and this permission notice shall be included in all
20copies or substantial portions of the Software.
21
22THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
25AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28SOFTWARE.
29******************************************************************************/
30
31#ifndef ETL_REFERENCE_FLAT_SET_INCLUDED
32#define ETL_REFERENCE_FLAT_SET_INCLUDED
33
34#include "platform.h"
35#include "algorithm.h"
36#include "error_handler.h"
37#include "exception.h"
38#include "functional.h"
39#include "iterator.h"
40#include "nth_type.h"
41#include "pool.h"
42#include "type_traits.h"
43#include "utility.h"
44#include "vector.h"
45
47
48#include <stddef.h>
49
50namespace etl
51{
52 //***************************************************************************
55 //***************************************************************************
56 class flat_set_exception : public exception
57 {
58 public:
59
60 flat_set_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
61 : exception(reason_, file_name_, line_number_)
62 {
63 }
64 };
65
66 //***************************************************************************
69 //***************************************************************************
70 class flat_set_full : public flat_set_exception
71 {
72 public:
73
74 flat_set_full(string_type file_name_, numeric_type line_number_)
75 : flat_set_exception(ETL_ERROR_TEXT("flat_set:full", ETL_REFERENCE_FLAT_SET_FILE_ID"A"), file_name_, line_number_)
76 {
77 }
78 };
79
80 //***************************************************************************
83 //***************************************************************************
84 class flat_set_iterator : public flat_set_exception
85 {
86 public:
87
88 flat_set_iterator(string_type file_name_, numeric_type line_number_)
89 : flat_set_exception(ETL_ERROR_TEXT("flat_set:iterator", ETL_REFERENCE_FLAT_SET_FILE_ID"B"), file_name_, line_number_)
90 {
91 }
92 };
93
94 //***************************************************************************
99 //***************************************************************************
100 template <typename T, typename TKeyCompare = etl::less<T> >
102 {
103 public:
104
105 typedef T key_type;
106 typedef T value_type;
107 typedef TKeyCompare key_compare;
108 typedef value_type& reference;
109 typedef const value_type& const_reference;
110 typedef value_type* pointer;
111 typedef const value_type* const_pointer;
112 typedef size_t size_type;
113
114 protected:
115
116 typedef etl::ivector<value_type*> lookup_t;
117
118 public:
119
120 //*************************************************************************
121 class iterator : public etl::iterator<ETL_OR_STD::bidirectional_iterator_tag, value_type>
122 {
123 public:
124
125 friend class ireference_flat_set;
126 friend class const_iterator;
127
128 iterator() {}
129
130 iterator(typename lookup_t::iterator ilookup_)
131 : ilookup(ilookup_)
132 {
133 }
134
135 iterator(const iterator& other)
136 : ilookup(other.ilookup)
137 {
138 }
139
140 iterator& operator=(const iterator& other)
141 {
142 ilookup = other.ilookup;
143 return *this;
144 }
145
146 iterator& operator++()
147 {
148 ++ilookup;
149 return *this;
150 }
151
152 iterator operator++(int)
153 {
154 iterator temp(*this);
155 ++ilookup;
156 return temp;
157 }
158
159 iterator& operator--()
160 {
161 --ilookup;
162 return *this;
163 }
164
165 iterator operator--(int)
166 {
167 iterator temp(*this);
168 --ilookup;
169 return temp;
170 }
171
172 reference operator*() const
173 {
174 return *(*ilookup);
175 }
176
177 pointer operator&() const
178 {
179 return etl::addressof(*(*ilookup));
180 }
181
182 pointer operator->() const
183 {
184 return etl::addressof(*(*ilookup));
185 }
186
187 friend bool operator==(const iterator& lhs, const iterator& rhs)
188 {
189 return lhs.ilookup == rhs.ilookup;
190 }
191
192 friend bool operator!=(const iterator& lhs, const iterator& rhs)
193 {
194 return !(lhs == rhs);
195 }
196
197 private:
198
199 typename lookup_t::iterator ilookup;
200 };
201
202 //*************************************************************************
203 class const_iterator : public etl::iterator<ETL_OR_STD::bidirectional_iterator_tag, const value_type>
204 {
205 public:
206
207 friend class ireference_flat_set;
208
209 const_iterator() {}
210
211 const_iterator(typename lookup_t::const_iterator ilookup_)
212 : ilookup(ilookup_)
213 {
214 }
215
216 const_iterator(const typename ireference_flat_set::iterator& other)
217 : ilookup(other.ilookup)
218 {
219 }
220
221 const_iterator(const const_iterator& other)
222 : ilookup(other.ilookup)
223 {
224 }
225
226 const_iterator& operator=(const iterator& other)
227 {
228 ilookup = other.ilookup;
229 return *this;
230 }
231
232 const_iterator& operator=(const const_iterator& other)
233 {
234 ilookup = other.ilookup;
235 return *this;
236 }
237
238 const_iterator& operator++()
239 {
240 ++ilookup;
241 return *this;
242 }
243
244 const_iterator operator++(int)
245 {
246 const_iterator temp(*this);
247 ++ilookup;
248 return temp;
249 }
250
251 const_iterator& operator--()
252 {
253 --ilookup;
254 return *this;
255 }
256
257 const_iterator operator--(int)
258 {
259 const_iterator temp(*this);
260 --ilookup;
261 return temp;
262 }
263
264 const_reference operator*() const
265 {
266 return *(*ilookup);
267 }
268
269 const_pointer operator&() const
270 {
271 return etl::addressof(*(*ilookup));
272 }
273
274 const_pointer operator->() const
275 {
276 return etl::addressof(*(*ilookup));
277 }
278
279 friend bool operator==(const const_iterator& lhs, const const_iterator& rhs)
280 {
281 return lhs.ilookup == rhs.ilookup;
282 }
283
284 friend bool operator!=(const const_iterator& lhs, const const_iterator& rhs)
285 {
286 return !(lhs == rhs);
287 }
288
289 private:
290
291 typename lookup_t::const_iterator ilookup;
292 };
293
294 protected:
295
296 typedef typename etl::parameter_type<T>::type parameter_t;
297
298 public:
299
300 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
301 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
302 typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
303
304 //*********************************************************************
307 //*********************************************************************
308 iterator begin()
309 {
310 return iterator(lookup.begin());
311 }
312
313 //*********************************************************************
316 //*********************************************************************
317 const_iterator begin() const
318 {
319 return const_iterator(lookup.begin());
320 }
321
322 //*********************************************************************
325 //*********************************************************************
326 iterator end()
327 {
328 return iterator(lookup.end());
329 }
330
331 //*********************************************************************
334 //*********************************************************************
335 const_iterator end() const
336 {
337 return const_iterator(lookup.end());
338 }
339
340 //*********************************************************************
343 //*********************************************************************
344 const_iterator cbegin() const
345 {
346 return const_iterator(lookup.cbegin());
347 }
348
349 //*********************************************************************
352 //*********************************************************************
353 const_iterator cend() const
354 {
355 return const_iterator(lookup.cend());
356 }
357
358 //*********************************************************************
362 //*********************************************************************
363 reverse_iterator rbegin()
364 {
365 return reverse_iterator(lookup.rbegin());
366 }
367
368 //*********************************************************************
373 //*********************************************************************
374 const_reverse_iterator rbegin() const
375 {
376 return const_reverse_iterator(lookup.rbegin());
377 }
378
379 //*********************************************************************
382 //*********************************************************************
383 reverse_iterator rend()
384 {
385 return reverse_iterator(lookup.rend());
386 }
387
388 //*********************************************************************
392 //*********************************************************************
393 const_reverse_iterator rend() const
394 {
395 return const_reverse_iterator(lookup.rend());
396 }
397
398 //*********************************************************************
403 //*********************************************************************
404 const_reverse_iterator crbegin() const
405 {
406 return const_reverse_iterator(lookup.crbegin());
407 }
408
409 //*********************************************************************
413 //*********************************************************************
414 const_reverse_iterator crend() const
415 {
416 return const_reverse_iterator(lookup.crend());
417 }
418
419 //*********************************************************************
427 //*********************************************************************
428 template <typename TIterator>
429 void assign(TIterator first, TIterator last)
430 {
431#if ETL_IS_DEBUG_BUILD
432 difference_type d = etl::distance(first, last);
433 ETL_ASSERT(d <= difference_type(capacity()), ETL_ERROR(flat_set_full));
434#endif
435
436 clear();
437
438 while (first != last)
439 {
440 insert(*first);
441 ++first;
442 }
443 }
444
445 //*********************************************************************
450 //*********************************************************************
451 ETL_OR_STD::pair<iterator, bool> insert(reference value)
452 {
453 iterator i_element = lower_bound(value);
454
455 return insert_at(i_element, value);
456 }
457
458 //*********************************************************************
464 //*********************************************************************
465 iterator insert(const_iterator /*position*/, reference value)
466 {
467 return insert(value).first;
468 }
469
470 //*********************************************************************
477 //*********************************************************************
478 template <class TIterator>
479 void insert(TIterator first, TIterator last)
480 {
481 while (first != last)
482 {
483 insert(*first);
484 ++first;
485 }
486 }
487
488 //*********************************************************************
492 //*********************************************************************
493 size_t erase(parameter_t key)
494 {
495 iterator i_element = find(key);
496
497 if (i_element == end())
498 {
499 return 0;
500 }
501 else
502 {
503 lookup.erase(i_element.ilookup);
504 return 1;
505 }
506 }
507
508 //*********************************************************************
509#if ETL_USING_CPP11
510 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
511 size_t erase(K&& key)
512 {
513 iterator i_element = find(etl::forward<K>(key));
514
515 if (i_element == end())
516 {
517 return 0;
518 }
519 else
520 {
521 lookup.erase(i_element.ilookup);
522 return 1;
523 }
524 }
525#endif
526
527 //*********************************************************************
530 //*********************************************************************
531 iterator erase(iterator i_element)
532 {
533 return lookup.erase(i_element.ilookup);
534 }
535
536 //*********************************************************************
539 //*********************************************************************
540 iterator erase(const_iterator i_element)
541 {
542 return lookup.erase(i_element.ilookup);
543 }
544
545 //*********************************************************************
551 //*********************************************************************
552 iterator erase(const_iterator first, const_iterator last)
553 {
554 return lookup.erase(first.ilookup, last.ilookup);
555 }
556
557 //*************************************************************************
559 //*************************************************************************
560 void clear()
561 {
562 lookup.clear();
563 }
564
565 //*********************************************************************
569 //*********************************************************************
570 iterator find(parameter_t key)
571 {
572 iterator itr = etl::lower_bound(begin(), end(), key, compare);
573
574 if (itr != end())
575 {
576 if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
577 {
578 return itr;
579 }
580 else
581 {
582 return end();
583 }
584 }
585
586 return end();
587 }
588
589#if ETL_USING_CPP11
590 //*********************************************************************
591 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
592 iterator find(const K& key)
593 {
594 iterator itr = etl::lower_bound(begin(), end(), key, compare);
595
596 if (itr != end())
597 {
598 if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
599 {
600 return itr;
601 }
602 else
603 {
604 return end();
605 }
606 }
607
608 return end();
609 }
610#endif
611
612 //*********************************************************************
616 //*********************************************************************
617 const_iterator find(parameter_t key) const
618 {
619 const_iterator itr = etl::lower_bound(begin(), end(), key, compare);
620
621 if (itr != end())
622 {
623 if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
624 {
625 return itr;
626 }
627 else
628 {
629 return end();
630 }
631 }
632
633 return end();
634 }
635
636#if ETL_USING_CPP11
637 //*********************************************************************
638 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
639 const_iterator find(const K& key) const
640 {
641 const_iterator itr = etl::lower_bound(begin(), end(), key, compare);
642
643 if (itr != end())
644 {
645 if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
646 {
647 return itr;
648 }
649 else
650 {
651 return end();
652 }
653 }
654
655 return end();
656 }
657#endif
658
659 //*********************************************************************
663 //*********************************************************************
664 size_t count(parameter_t key) const
665 {
666 return (find(key) == end()) ? 0 : 1;
667 }
668
669#if ETL_USING_CPP11
670 //*********************************************************************
671 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
672 size_t count(const K& key) const
673 {
674 return (find(key) == end()) ? 0 : 1;
675 }
676#endif
677
678 //*********************************************************************
682 //*********************************************************************
683 iterator lower_bound(parameter_t key)
684 {
685 return etl::lower_bound(begin(), end(), key, compare);
686 }
687
688#if ETL_USING_CPP11
689 //*********************************************************************
690 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
691 iterator lower_bound(const K& key)
692 {
693 return etl::lower_bound(begin(), end(), key, compare);
694 }
695#endif
696
697 //*********************************************************************
701 //*********************************************************************
702 const_iterator lower_bound(parameter_t key) const
703 {
704 return etl::lower_bound(cbegin(), cend(), key, compare);
705 }
706
707#if ETL_USING_CPP11
708 //*********************************************************************
709 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
710 const_iterator lower_bound(const K& key) const
711 {
712 return etl::lower_bound(cbegin(), cend(), key, compare);
713 }
714#endif
715
716 //*********************************************************************
720 //*********************************************************************
721 iterator upper_bound(parameter_t key)
722 {
723 return etl::upper_bound(begin(), end(), key, compare);
724 }
725
726#if ETL_USING_CPP11
727 //*********************************************************************
728 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
729 iterator upper_bound(const K& key)
730 {
731 return etl::upper_bound(begin(), end(), key, compare);
732 }
733#endif
734
735 //*********************************************************************
739 //*********************************************************************
740 const_iterator upper_bound(parameter_t key) const
741 {
742 return etl::upper_bound(cbegin(), cend(), key, compare);
743 }
744
745#if ETL_USING_CPP11
746 //*********************************************************************
747 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
748 const_iterator upper_bound(const K& key) const
749 {
750 return etl::upper_bound(cbegin(), cend(), key, compare);
751 }
752#endif
753
754 //*********************************************************************
758 //*********************************************************************
759 ETL_OR_STD::pair<iterator, iterator> equal_range(parameter_t key)
760 {
761 return etl::equal_range(begin(), end(), key, compare);
762 }
763
764#if ETL_USING_CPP11
765 //*********************************************************************
766 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
767 ETL_OR_STD::pair<iterator, iterator> equal_range(const K& key)
768 {
769 return etl::equal_range(begin(), end(), key, compare);
770 }
771#endif
772
773 //*********************************************************************
777 //*********************************************************************
778 ETL_OR_STD::pair<const_iterator, const_iterator> equal_range(parameter_t key) const
779 {
780 return etl::upper_bound(cbegin(), cend(), key, compare);
781 }
782
783#if ETL_USING_CPP11
784 //*********************************************************************
785 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
786 ETL_OR_STD::pair<const_iterator, const_iterator> equal_range(const K& key) const
787 {
788 return etl::upper_bound(cbegin(), cend(), key, compare);
789 }
790#endif
791
792 //*************************************************************************
794 //*************************************************************************
795 bool contains(parameter_t key) const
796 {
797 return find(key) != end();
798 }
799
800#if ETL_USING_CPP11
801 //*************************************************************************
802 template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
803 bool contains(const K& k) const
804 {
805 return find(k) != end();
806 }
807#endif
808
809 //*************************************************************************
812 //*************************************************************************
813 size_type size() const
814 {
815 return lookup.size();
816 }
817
818 //*************************************************************************
821 //*************************************************************************
822 bool empty() const
823 {
824 return lookup.empty();
825 }
826
827 //*************************************************************************
830 //*************************************************************************
831 bool full() const
832 {
833 return lookup.full();
834 }
835
836 //*************************************************************************
839 //*************************************************************************
840 size_type capacity() const
841 {
842 return lookup.capacity();
843 }
844
845 //*************************************************************************
848 //*************************************************************************
849 size_type max_size() const
850 {
851 return lookup.max_size();
852 }
853
854 //*************************************************************************
857 //*************************************************************************
858 size_t available() const
859 {
860 return lookup.available();
861 }
862
863 protected:
864
865 //*********************************************************************
867 //*********************************************************************
868 ireference_flat_set(lookup_t& lookup_)
869 : lookup(lookup_)
870 {
871 }
872
873 //*********************************************************************
877 //*********************************************************************
878 ETL_OR_STD::pair<iterator, bool> insert_at(iterator i_element, reference value)
879 {
880 ETL_OR_STD::pair<iterator, bool> result(end(), false);
881
882 if (i_element == end())
883 {
884 // At the end.
885 ETL_ASSERT(!lookup.full(), ETL_ERROR(flat_set_full));
886
887 lookup.push_back(&value);
888 result.first = --end();
889 result.second = true;
890 }
891 else
892 {
893 // Not at the end.
894 result.first = i_element;
895
896 // Existing element?
897 if (compare(value, *i_element) || compare(*i_element, value))
898 {
899 // A new one.
900 ETL_ASSERT(!lookup.full(), ETL_ERROR(flat_set_full));
901 lookup.insert(i_element.ilookup, &value);
902 result.second = true;
903 }
904 }
905
906 return result;
907 }
908
909 private:
910
911 // Disable copy construction.
913 ireference_flat_set& operator=(const ireference_flat_set&);
914
915 lookup_t& lookup;
916
917 TKeyCompare compare;
918
919 //*************************************************************************
921 //*************************************************************************
922#if defined(ETL_POLYMORPHIC_REFERENCE_FLAT_SET) || defined(ETL_POLYMORPHIC_CONTAINERS)
923
924 public:
925
926 virtual ~ireference_flat_set() {}
927#else
928
929 protected:
930
932#endif
933 };
934
935 //***************************************************************************
938 //***************************************************************************
939 template <typename TKey, const size_t MAX_SIZE_, typename TKeyCompare = etl::less<TKey> >
940 class reference_flat_set : public ireference_flat_set<TKey, TKeyCompare>
941 {
942 public:
943
944 static ETL_CONSTANT size_t MAX_SIZE = MAX_SIZE_;
945
946 using typename ireference_flat_set<TKey, TKeyCompare>::value_type;
947
948 //*************************************************************************
950 //*************************************************************************
952 : ireference_flat_set<TKey, TKeyCompare>(lookup)
953 {
954 }
955
956 //*************************************************************************
958 //*************************************************************************
960 : ireference_flat_set<TKey, TKeyCompare>(lookup)
961 {
963 }
964
965 //*************************************************************************
970 //*************************************************************************
971 template <typename TIterator>
972 reference_flat_set(TIterator first, TIterator last)
973 : ireference_flat_set<TKey, TKeyCompare>(lookup)
974 {
976 }
977
978 //*************************************************************************
980 //*************************************************************************
985
986 private:
987
988 // The vector that stores pointers to the nodes.
990 };
991
992 template <typename TKey, const size_t MAX_SIZE_, typename TCompare>
993 ETL_CONSTANT size_t reference_flat_set<TKey, MAX_SIZE_, TCompare>::MAX_SIZE;
994
995 //*************************************************************************
997 //*************************************************************************
998#if ETL_USING_CPP17 && ETL_HAS_INITIALIZER_LIST
999 template <typename... T>
1000 reference_flat_set(T...) -> reference_flat_set<etl::nth_type_t<0, T...>, sizeof...(T)>;
1001#endif
1002
1003 //*************************************************************************
1005 //*************************************************************************
1006#if ETL_USING_CPP11 && ETL_HAS_INITIALIZER_LIST
1007 template <typename TKey, typename TKeyCompare = etl::less<TKey>, typename... T>
1008 constexpr auto make_reference_flat_set(T&&... keys) -> etl::reference_flat_set<TKey, sizeof...(T), TKeyCompare>
1009 {
1010 return {etl::forward<T>(keys)...};
1011 }
1012#endif
1013
1014 //***************************************************************************
1020 //***************************************************************************
1021 template <typename T, typename TKeyCompare>
1023 {
1024 return (lhs.size() == rhs.size()) && etl::equal(lhs.begin(), lhs.end(), rhs.begin());
1025 }
1026
1027 //***************************************************************************
1033 //***************************************************************************
1034 template <typename T, typename TKeyCompare>
1036 {
1037 return !(lhs == rhs);
1038 }
1039} // namespace etl
1040
1041#endif
Definition reference_flat_set.h:71
Definition reference_flat_set.h:122
Definition reference_flat_set.h:102
const_iterator lower_bound(parameter_t key) const
Definition reference_flat_set.h:702
~ireference_flat_set()
Destructor.
Definition reference_flat_set.h:931
size_type capacity() const
Definition reference_flat_set.h:840
ETL_OR_STD::pair< iterator, bool > insert_at(iterator i_element, reference value)
Definition reference_flat_set.h:878
size_t available() const
Definition reference_flat_set.h:858
ETL_OR_STD::pair< iterator, bool > insert(reference value)
Definition reference_flat_set.h:451
const_iterator begin() const
Definition reference_flat_set.h:317
iterator upper_bound(parameter_t key)
Definition reference_flat_set.h:721
const_iterator find(parameter_t key) const
Definition reference_flat_set.h:617
iterator erase(iterator i_element)
Definition reference_flat_set.h:531
void assign(TIterator first, TIterator last)
Definition reference_flat_set.h:429
iterator erase(const_iterator first, const_iterator last)
Definition reference_flat_set.h:552
const_reverse_iterator rend() const
Definition reference_flat_set.h:393
const_reverse_iterator crbegin() const
Definition reference_flat_set.h:404
const_iterator end() const
Definition reference_flat_set.h:335
iterator begin()
Definition reference_flat_set.h:308
size_t erase(parameter_t key)
Definition reference_flat_set.h:493
bool contains(parameter_t key) const
Check if the set contains the key.
Definition reference_flat_set.h:795
iterator insert(const_iterator, reference value)
Definition reference_flat_set.h:465
iterator end()
Definition reference_flat_set.h:326
ETL_OR_STD::pair< const_iterator, const_iterator > equal_range(parameter_t key) const
Definition reference_flat_set.h:778
ETL_OR_STD::pair< iterator, iterator > equal_range(parameter_t key)
Definition reference_flat_set.h:759
const_iterator upper_bound(parameter_t key) const
Definition reference_flat_set.h:740
const_iterator cend() const
Definition reference_flat_set.h:353
const_iterator cbegin() const
Definition reference_flat_set.h:344
iterator find(parameter_t key)
Definition reference_flat_set.h:570
const_reverse_iterator rbegin() const
Definition reference_flat_set.h:374
size_type max_size() const
Definition reference_flat_set.h:849
const_reverse_iterator crend() const
Definition reference_flat_set.h:414
bool empty() const
Definition reference_flat_set.h:822
size_type size() const
Definition reference_flat_set.h:813
reverse_iterator rbegin()
Definition reference_flat_set.h:363
ireference_flat_set(lookup_t &lookup_)
Constructor.
Definition reference_flat_set.h:868
size_t count(parameter_t key) const
Definition reference_flat_set.h:664
void insert(TIterator first, TIterator last)
Definition reference_flat_set.h:479
bool full() const
Definition reference_flat_set.h:831
void clear()
Clears the reference_flat_set.
Definition reference_flat_set.h:560
iterator erase(const_iterator i_element)
Definition reference_flat_set.h:540
iterator lower_bound(parameter_t key)
Definition reference_flat_set.h:683
reverse_iterator rend()
Definition reference_flat_set.h:383
Definition reference_flat_set.h:941
reference_flat_set(TIterator first, TIterator last)
Definition reference_flat_set.h:972
reference_flat_set(const reference_flat_set &other)
Copy constructor.
Definition reference_flat_set.h:959
reference_flat_set()
Constructor.
Definition reference_flat_set.h:951
~reference_flat_set()
Destructor.
Definition reference_flat_set.h:981
ETL_CONSTEXPR14 bool operator!=(const etl::bitset< Active_Bits, TElement > &lhs, const etl::bitset< Active_Bits, TElement > &rhs) ETL_NOEXCEPT
Definition bitset_new.h:2529
#define ETL_ASSERT(b, e)
Definition error_handler.h:511
ETL_EXCEPTION_CONSTEXPR exception(string_type reason_, string_type, numeric_type)
Constructor.
Definition exception.h:81
ETL_CONSTEXPR17 etl::enable_if<!etl::is_same< T, etl::nullptr_t >::value, T >::type * addressof(T &t)
Definition addressof.h:52
iterator erase(iterator i_element)
Definition vector.h:911
Definition vector.h:71
Definition vector.h:1277
bitset_ext
Definition absolute.h:40
ETL_CONSTEXPR14 bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1081
ETL_CONSTEXPR14 bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1093
Definition compare.h:51
iterator
Definition iterator.h:424
etl::conditional< etl::is_fundamental< T >::value||etl::is_pointer< T >::value, T, constT & >::type type
By default fundamental and pointer types are passed by value.
Definition parameter_type.h:46