| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // ArduinoJson - https://arduinojson.org
- // Copyright © 2014-2025, Benoit BLANCHON
- // MIT License
- #pragma once
- #include <ArduinoJson/Collection/CollectionIterator.hpp>
- #include <ArduinoJson/Variant/VariantCompare.hpp>
- #include <ArduinoJson/Variant/VariantImpl.hpp>
- ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
- inline VariantImpl::iterator VariantImpl::at(size_t index) const {
- if (!isArray())
- return iterator();
- auto it = createIterator();
- while (!it.done() && index) {
- it.move();
- --index;
- }
- return it;
- }
- inline VariantData* VariantImpl::addElement() {
- if (!isArray())
- return nullptr;
- auto slot = allocVariant();
- if (!slot)
- return nullptr;
- VariantImpl::appendOne(slot);
- return slot.ptr();
- }
- inline VariantData* VariantImpl::getOrAddElement(size_t index) {
- auto it = createIterator();
- while (!it.done() && index > 0) {
- it.move();
- index--;
- }
- if (it.done())
- index++;
- VariantData* element = it->data();
- while (index > 0) {
- element = addElement();
- if (!element)
- return nullptr;
- index--;
- }
- return element;
- }
- inline VariantData* VariantImpl::getElement(size_t index) const {
- return at(index)->data();
- }
- inline void VariantImpl::removeElement(iterator it) {
- if (!isArray())
- return;
- removeOne(it);
- }
- inline void VariantImpl::removeElement(size_t index) {
- removeElement(at(index));
- }
- template <typename T>
- inline bool VariantImpl::addValue(const T& value) {
- if (!isArray())
- return false;
- auto slot = allocVariant();
- if (!slot)
- return false;
- JsonVariant variant(slot.ptr(), resources_);
- if (!variant.set(value)) {
- freeVariant(slot);
- return false;
- }
- appendOne(slot);
- return true;
- }
- // Returns the size (in bytes) of an array with n elements.
- constexpr size_t sizeofArray(size_t n) {
- return n * sizeof(VariantData);
- }
- ARDUINOJSON_END_PRIVATE_NAMESPACE
|