49class QMinimalFlatSet : QtPrivate::CompactStorage<Compare>
52 using CompareStorage = QtPrivate::CompactStorage<Compare>;
54 QMinimalFlatSet() =
default;
55 explicit QMinimalFlatSet(
const Compare &cmp) : CompareStorage{cmp} {}
58 using const_iterator =
typename Container::const_iterator;
59 using iterator = const_iterator;
60 using const_reverse_iterator =
typename Container::const_reverse_iterator;
61 using reverse_iterator = const_reverse_iterator;
63 using key_compare = Compare;
64 using value_compare = Compare;
66 key_compare key_comp()
const {
return this->object(); }
67 value_compare value_comp()
const {
return key_comp(); }
69 iterator begin()
const {
return c.cbegin(); }
70 iterator end()
const {
return c.cend(); }
71 iterator cbegin()
const {
return begin(); }
72 iterator cend()
const {
return cend(); }
74 reverse_iterator rbegin()
const {
return c.crbegin(); }
75 reverse_iterator rend()
const {
return c.crend(); }
76 reverse_iterator crbegin()
const {
return rbegin(); }
77 reverse_iterator crend()
const {
return rend(); }
83 auto size()
const {
return c.size(); }
84 auto count()
const {
return size(); }
85 bool isEmpty()
const {
return size() == 0; }
87 std::pair<iterator,
bool> insert(value_type &&v)
90 const auto r = lookup(v);
94 return {c.insert(r.it, std::move(v)),
true};
97 std::pair<iterator,
bool> insert(
const value_type &v)
100 const auto r = lookup(v);
102 return {r.it,
false};
104 return {c.insert(r.it, v),
true};
107 void erase(
const value_type &v)
110 const auto r = lookup(v);
114 void remove(
const value_type &v) { erase(v); }
116 bool contains(
const value_type &v)
const
118 return lookup(v).exists;
121 const Container &values()
const & {
return c; }
122 Container values() && {
return std::move(c); }
125 auto lookup(
const value_type &v)
const
132 auto cmp = std::ref(
this->object());
134 const auto it = std::lower_bound(c.cbegin(), c.cend(), v, cmp);
135 return R{it, it != c.cend() && !cmp(v, *it)};
138#ifdef QMINIMAL_FLAT_SET_DEBUG
139 friend QDebug operator<<(QDebug dbg,
const QMinimalFlatSet &set)
141 const QDebugStateSaver saver(dbg);
142 dbg.nospace() <<
"QMinimalFlatSet{";