/src/arduinojson/src/ArduinoJson/Array/ArrayImpl.hpp
Line | Count | Source |
1 | | // ArduinoJson - https://arduinojson.org |
2 | | // Copyright © 2014-2025, Benoit BLANCHON |
3 | | // MIT License |
4 | | |
5 | | #pragma once |
6 | | |
7 | | #include <ArduinoJson/Variant/VariantCompare.hpp> |
8 | | #include <ArduinoJson/Variant/VariantImpl.hpp> |
9 | | |
10 | | ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE |
11 | | |
12 | 0 | inline VariantImpl::iterator VariantImpl::at(size_t index) const { |
13 | 0 | if (!isArray()) |
14 | 0 | return iterator(); |
15 | 0 |
|
16 | 0 | auto it = createIterator(); |
17 | 0 | while (!it.done() && index) { |
18 | 0 | it.move(resources_); |
19 | 0 | --index; |
20 | 0 | } |
21 | 0 | return it; |
22 | 0 | } |
23 | | |
24 | | inline VariantData* VariantImpl::addNewElement(VariantData* data, |
25 | 9.11k | ResourceManager* resources) { |
26 | 9.11k | ARDUINOJSON_ASSERT(data != nullptr); |
27 | 9.11k | ARDUINOJSON_ASSERT(data->isArray()); |
28 | 9.11k | ARDUINOJSON_ASSERT(resources != nullptr); |
29 | | |
30 | 9.11k | auto slot = resources->allocVariant(); |
31 | 9.11k | if (!slot) |
32 | 0 | return nullptr; |
33 | 9.11k | addElement(slot, data, resources); |
34 | 9.11k | return slot.ptr(); |
35 | 9.11k | } |
36 | | |
37 | 0 | inline VariantData* VariantImpl::getOrAddElement(size_t index) { |
38 | 0 | auto it = createIterator(); |
39 | 0 | while (!it.done() && index > 0) { |
40 | 0 | it.move(resources_); |
41 | 0 | index--; |
42 | 0 | } |
43 | 0 | if (it.done()) |
44 | 0 | index++; |
45 | 0 | VariantData* element = it.data(); |
46 | 0 | while (index > 0) { |
47 | 0 | element = addNewElement(); |
48 | 0 | if (!element) |
49 | 0 | return nullptr; |
50 | 0 | index--; |
51 | 0 | } |
52 | 0 | return element; |
53 | 0 | } |
54 | | |
55 | 0 | inline VariantData* VariantImpl::getElement(size_t index) const { |
56 | 0 | return at(index).data(); |
57 | 0 | } |
58 | | |
59 | 0 | inline void VariantImpl::removeElement(size_t index) { |
60 | 0 | removeElement(at(index)); |
61 | 0 | } |
62 | | |
63 | | // Returns the size (in bytes) of an array with n elements. |
64 | 0 | constexpr size_t sizeofArray(size_t n) { |
65 | 0 | return n * sizeof(VariantData); |
66 | 0 | } |
67 | | |
68 | | ARDUINOJSON_END_PRIVATE_NAMESPACE |