25 QCborValueRef item {};
26 friend class ConstIterator;
27 friend class QCborArray;
28 Iterator(QCborContainerPrivate *dd, qsizetype ii) : item(dd, ii) {}
30 typedef std::random_access_iterator_tag iterator_category;
31 typedef qsizetype difference_type;
32 typedef QCborValue value_type;
33 typedef QCborValueRef reference;
34 typedef QCborValueRef *pointer;
36 constexpr Iterator() =
default;
37 constexpr Iterator(
const Iterator &) =
default;
38 Iterator &operator=(
const Iterator &other)
41 item.d = other.item.d;
42 item.i = other.item.i;
46 QCborValueRef operator*()
const {
return item; }
47 QCborValueRef *operator->() {
return &item; }
48 const QCborValueConstRef *operator->()
const {
return &item; }
49 QCborValueRef operator[](qsizetype j)
const {
return { item.d, item.i + j }; }
50#if QT_CORE_REMOVED_SINCE(6
, 8
)
51 bool operator==(
const Iterator &o)
const {
return item.d == o.item.d && item.i == o.item.i; }
52 bool operator!=(
const Iterator &o)
const {
return !operator==(o); }
53 bool operator<(
const Iterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i < other.item.i; }
54 bool operator<=(
const Iterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i <= other.item.i; }
55 bool operator>(
const Iterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i > other.item.i; }
56 bool operator>=(
const Iterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i >= other.item.i; }
57 bool operator==(
const ConstIterator &o)
const {
return item.d == o.item.d && item.i == o.item.i; }
58 bool operator!=(
const ConstIterator &o)
const {
return !operator==(o); }
59 bool operator<(
const ConstIterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i < other.item.i; }
60 bool operator<=(
const ConstIterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i <= other.item.i; }
61 bool operator>(
const ConstIterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i > other.item.i; }
62 bool operator>=(
const ConstIterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i >= other.item.i; }
64 Iterator &operator++() { ++item.i;
return *
this; }
65 Iterator operator++(
int) { Iterator n = *
this; ++item.i;
return n; }
66 Iterator &operator--() { item.i--;
return *
this; }
67 Iterator operator--(
int) { Iterator n = *
this; item.i--;
return n; }
68 Iterator &operator+=(qsizetype j) { item.i += j;
return *
this; }
69 Iterator &operator-=(qsizetype j) { item.i -= j;
return *
this; }
70 Iterator operator+(qsizetype j)
const {
return Iterator({ item.d, item.i + j }); }
71 Iterator operator-(qsizetype j)
const {
return Iterator({ item.d, item.i - j }); }
72 qsizetype operator-(Iterator j)
const {
return item.i - j.item.i; }
75 static bool comparesEqual_helper(
const Iterator &lhs,
const Iterator &rhs)
noexcept
77 return lhs.item.d == rhs.item.d && lhs.item.i == rhs.item.i;
80 static bool comparesEqual_helper(
const Iterator &lhs,
const ConstIterator &rhs)
noexcept
82 return lhs.item.d == rhs.item.d && lhs.item.i == rhs.item.i;
85 static Qt::strong_ordering compareThreeWay_helper(
const Iterator &lhs,
86 const Iterator &rhs)
noexcept
88 Q_ASSERT(lhs.item.d == rhs.item.d);
89 return Qt::compareThreeWay(lhs.item.i, rhs.item.i);
92 static Qt::strong_ordering compareThreeWay_helper(
const Iterator &lhs,
93 const ConstIterator &rhs)
noexcept
95 Q_ASSERT(lhs.item.d == rhs.item.d);
96 return Qt::compareThreeWay(lhs.item.i, rhs.item.i);
100 friend bool comparesEqual(
const Iterator &lhs,
const Iterator &rhs)
noexcept
102 return comparesEqual_helper(lhs, rhs);
104 friend Qt::strong_ordering compareThreeWay(
const Iterator &lhs,
105 const Iterator &rhs)
noexcept
107 return compareThreeWay_helper(lhs, rhs);
109 Q_DECLARE_STRONGLY_ORDERED(Iterator)
110 friend bool comparesEqual(
const Iterator &lhs,
const ConstIterator &rhs)
noexcept
112 return comparesEqual_helper(lhs, rhs);
114 friend Qt::strong_ordering compareThreeWay(
const Iterator &lhs,
115 const ConstIterator &rhs)
noexcept
117 return compareThreeWay_helper(lhs, rhs);
119 Q_DECLARE_STRONGLY_ORDERED(Iterator, ConstIterator)
122 class ConstIterator {
123 QCborValueConstRef item;
124 friend class Iterator;
125 friend class QCborArray;
126 ConstIterator(QCborContainerPrivate *dd, qsizetype ii) : item(dd, ii) {}
128 typedef std::random_access_iterator_tag iterator_category;
129 typedef qsizetype difference_type;
130 typedef const QCborValue value_type;
131 typedef const QCborValueRef reference;
132 typedef const QCborValueRef *pointer;
134 constexpr ConstIterator() =
default;
135 constexpr ConstIterator(
const ConstIterator &) =
default;
136 ConstIterator &operator=(
const ConstIterator &other)
139 item.d = other.item.d;
140 item.i = other.item.i;
144 QCborValueConstRef operator*()
const {
return item; }
145 const QCborValueConstRef *operator->()
const {
return &item; }
146 QCborValueConstRef operator[](qsizetype j)
const {
return QCborValueRef{ item.d, item.i + j }; }
147#if QT_CORE_REMOVED_SINCE(6
, 8
)
148 bool operator==(
const Iterator &o)
const {
return item.d == o.item.d && item.i == o.item.i; }
149 bool operator!=(
const Iterator &o)
const {
return !operator==(o); }
150 bool operator<(
const Iterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i < other.item.i; }
151 bool operator<=(
const Iterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i <= other.item.i; }
152 bool operator>(
const Iterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i > other.item.i; }
153 bool operator>=(
const Iterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i >= other.item.i; }
154 bool operator==(
const ConstIterator &o)
const {
return item.d == o.item.d && item.i == o.item.i; }
155 bool operator!=(
const ConstIterator &o)
const {
return !operator==(o); }
156 bool operator<(
const ConstIterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i < other.item.i; }
157 bool operator<=(
const ConstIterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i <= other.item.i; }
158 bool operator>(
const ConstIterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i > other.item.i; }
159 bool operator>=(
const ConstIterator& other)
const { Q_ASSERT(item.d == other.item.d);
return item.i >= other.item.i; }
161 ConstIterator &operator++() { ++item.i;
return *
this; }
162 ConstIterator operator++(
int) { ConstIterator n = *
this; ++item.i;
return n; }
163 ConstIterator &operator--() { item.i--;
return *
this; }
164 ConstIterator operator--(
int) { ConstIterator n = *
this; item.i--;
return n; }
165 ConstIterator &operator+=(qsizetype j) { item.i += j;
return *
this; }
166 ConstIterator &operator-=(qsizetype j) { item.i -= j;
return *
this; }
167 ConstIterator operator+(qsizetype j)
const {
return ConstIterator({ item.d, item.i + j }); }
168 ConstIterator operator-(qsizetype j)
const {
return ConstIterator({ item.d, item.i - j }); }
169 qsizetype operator-(ConstIterator j)
const {
return item.i - j.item.i; }
172 static bool comparesEqual_helper(
const ConstIterator &lhs,
173 const ConstIterator &rhs)
noexcept
175 return lhs.item.d == rhs.item.d && lhs.item.i == rhs.item.i;
177 static Qt::strong_ordering compareThreeWay_helper(
const ConstIterator &lhs,
178 const ConstIterator &rhs)
noexcept
180 Q_ASSERT(lhs.item.d == rhs.item.d);
181 return Qt::compareThreeWay(lhs.item.i, rhs.item.i);
185 friend bool comparesEqual(
const ConstIterator &lhs,
const ConstIterator &rhs)
noexcept
187 return comparesEqual_helper(lhs, rhs);
189 friend Qt::strong_ordering compareThreeWay(
const ConstIterator &lhs,
190 const ConstIterator &rhs)
noexcept
192 return compareThreeWay_helper(lhs, rhs);
194 Q_DECLARE_STRONGLY_ORDERED(ConstIterator)
197 typedef qsizetype size_type;
198 typedef QCborValue value_type;
199 typedef value_type *pointer;
200 typedef const value_type *const_pointer;
201 typedef QCborValue &reference;
202 typedef const QCborValue &const_reference;
203 typedef qsizetype difference_type;
205 QCborArray()
noexcept;
206 QCborArray(
const QCborArray &other)
noexcept;
207 QCborArray(QCborArray &&other)
noexcept =
default;
208 QCborArray &operator=(
const QCborArray &other)
noexcept;
209 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QCborArray)
210 QCborArray(std::initializer_list<QCborValue> args)
213 detach(qsizetype(args.size()));
214 for (
const QCborValue &v : args)
219 void swap(QCborArray &other)
noexcept
224 QCborValue toCborValue()
const {
return *
this; }
226 qsizetype size()
const noexcept;
227 bool isEmpty()
const {
return size() == 0; }
230 QCborValue at(qsizetype i)
const;
231 QCborValue first()
const {
return at(0); }
232 QCborValue last()
const {
return at(size() - 1); }
233 const QCborValue operator[](qsizetype i)
const {
return at(i); }
234 QCborValueRef first() { Q_ASSERT(!isEmpty());
return begin()[0]; }
235 QCborValueRef last() { Q_ASSERT(!isEmpty());
return begin()[size() - 1]; }
236 QCborValueRef operator[](qsizetype i)
239 insert(i, QCborValue());
243 void insert(qsizetype i,
const QCborValue &value);
244 void insert(qsizetype i, QCborValue &&value);
245 void prepend(
const QCborValue &value) { insert(0, value); }
246 void prepend(QCborValue &&value) { insert(0, std::move(value)); }
247 void append(
const QCborValue &value) { insert(-1, value); }
248 void append(QCborValue &&value) { insert(-1, std::move(value)); }
249 QCborValue extract(ConstIterator it) {
return extract(Iterator{ it.item.d, it.item.i }); }
250 QCborValue extract(Iterator it);
251 void removeAt(qsizetype i);
252 QCborValue takeAt(qsizetype i) { Q_ASSERT(i < size());
return extract(begin() + i); }
253 void removeFirst() { removeAt(0); }
254 void removeLast() { removeAt(size() - 1); }
255 QCborValue takeFirst() {
return takeAt(0); }
256 QCborValue takeLast() {
return takeAt(size() - 1); }
258 bool contains(
const QCborValue &value)
const;
260 Q_DECL_PURE_FUNCTION
int compare(
const QCborArray &other)
const noexcept;
261#if QT_CORE_REMOVED_SINCE(6
, 8
)
262 bool operator==(
const QCborArray &other)
const noexcept
263 {
return compare(other) == 0; }
264 bool operator!=(
const QCborArray &other)
const noexcept
265 {
return !operator==(other); }
266 bool operator<(
const QCborArray &other)
const
267 {
return compare(other) < 0; }
270 typedef Iterator iterator;
271 typedef ConstIterator const_iterator;
272 iterator begin() { detach();
return iterator{d.data(), 0}; }
273 const_iterator constBegin()
const {
return const_iterator{d.data(), 0}; }
274 const_iterator begin()
const {
return constBegin(); }
275 const_iterator cbegin()
const {
return constBegin(); }
276 iterator end() { detach();
return iterator{d.data(), size()}; }
277 const_iterator constEnd()
const {
return const_iterator{d.data(), size()}; }
278 const_iterator end()
const {
return constEnd(); }
279 const_iterator cend()
const {
return constEnd(); }
280 iterator insert(iterator before,
const QCborValue &value)
281 { insert(before.item.i, value);
return iterator{d.data(), before.item.i}; }
282 iterator insert(const_iterator before,
const QCborValue &value)
283 { insert(before.item.i, value);
return iterator{d.data(), before.item.i}; }
284 iterator erase(iterator it) { removeAt(it.item.i);
return iterator{d.data(), it.item.i}; }
285 iterator erase(const_iterator it) { removeAt(it.item.i);
return iterator{d.data(), it.item.i}; }
287 void push_back(
const QCborValue &t) { append(t); }
288 void push_front(
const QCborValue &t) { prepend(t); }
289 void pop_front() { removeFirst(); }
290 void pop_back() { removeLast(); }
291 bool empty()
const {
return isEmpty(); }
294 QCborArray operator+(
const QCborValue &v)
const
295 { QCborArray n = *
this; n += v;
return n; }
296 QCborArray &operator+=(
const QCborValue &v)
297 { append(v);
return *
this; }
298 QCborArray &operator<<(
const QCborValue &v)
299 { append(v);
return *
this; }
301 static QCborArray fromStringList(
const QStringList &list);
302 static QCborArray fromVariantList(
const QVariantList &list);
303 static QCborArray fromJsonArray(
const QJsonArray &array);
304 static QCborArray fromJsonArray(QJsonArray &&array)
noexcept;
305 QVariantList toVariantList()
const;
306 QJsonArray toJsonArray()
const;
309 friend Q_CORE_EXPORT Q_DECL_PURE_FUNCTION
bool
310 comparesEqual(
const QCborArray &lhs,
const QCborArray &rhs)
noexcept;
311 friend Qt::strong_ordering compareThreeWay(
const QCborArray &lhs,
312 const QCborArray &rhs)
noexcept
314 int c = lhs.compare(rhs);
315 return Qt::compareThreeWay(c, 0);
317 Q_DECLARE_STRONGLY_ORDERED(QCborArray)
319 static Q_DECL_PURE_FUNCTION
bool
320 comparesEqual_helper(
const QCborArray &lhs,
const QCborValue &rhs)
noexcept;
321 static Q_DECL_PURE_FUNCTION Qt::strong_ordering
322 compareThreeWay_helper(
const QCborArray &lhs,
const QCborValue &rhs)
noexcept;
323 friend bool comparesEqual(
const QCborArray &lhs,
324 const QCborValue &rhs)
noexcept
326 return comparesEqual_helper(lhs, rhs);
328 friend Qt::strong_ordering compareThreeWay(
const QCborArray &lhs,
329 const QCborValue &rhs)
noexcept
331 return compareThreeWay_helper(lhs, rhs);
333 Q_DECLARE_STRONGLY_ORDERED(QCborArray, QCborValue)
335 static Q_DECL_PURE_FUNCTION
bool
336 comparesEqual_helper(
const QCborArray &lhs, QCborValueConstRef rhs)
noexcept;
337 static Q_DECL_PURE_FUNCTION Qt::strong_ordering
338 compareThreeWay_helper(
const QCborArray &lhs, QCborValueConstRef rhs)
noexcept;
339 friend bool comparesEqual(
const QCborArray &lhs,
340 const QCborValueConstRef &rhs)
noexcept
342 return comparesEqual_helper(lhs, rhs);
344 friend Qt::strong_ordering compareThreeWay(
const QCborArray &lhs,
345 const QCborValueConstRef &rhs)
noexcept
347 return compareThreeWay_helper(lhs, rhs);
349 Q_DECLARE_STRONGLY_ORDERED(QCborArray, QCborValueConstRef)
351 void detach(qsizetype reserve = 0);
354 friend QCborValueRef;
355 friend class QJsonPrivate::Variant;
356 explicit QCborArray(QCborContainerPrivate &dd)
noexcept;
357 QExplicitlySharedDataPointer<QCborContainerPrivate> d;