Skip to content

Commit 4a2568e

Browse files
committed
Merge CollectionImpl into VariantImpl
1 parent f124af3 commit 4a2568e

File tree

5 files changed

+48
-108
lines changed

5 files changed

+48
-108
lines changed

src/ArduinoJson/Array/ArrayImpl.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ inline VariantData* VariantImpl::addElement(VariantData* data,
3030
auto slot = resources->allocVariant();
3131
if (!slot)
3232
return nullptr;
33-
CollectionImpl::appendOne(slot, data, resources);
33+
appendOne(slot, data, resources);
3434
return slot.ptr();
3535
}
3636

@@ -73,7 +73,7 @@ inline bool VariantImpl::addValue(const T& value, VariantData* data,
7373
resources->freeVariant(slot);
7474
return false;
7575
}
76-
CollectionImpl::appendOne(slot, data, resources);
76+
appendOne(slot, data, resources);
7777
return true;
7878
}
7979

src/ArduinoJson/Collection/CollectionData.hpp

Lines changed: 1 addition & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ struct VariantData;
1616
class ResourceManager;
1717

1818
class CollectionIterator {
19-
friend class CollectionImpl;
19+
friend class VariantImpl;
2020

2121
public:
2222
CollectionIterator() : slot_(nullptr), currentId_(NULL_SLOT) {}
@@ -66,70 +66,4 @@ class CollectionIterator {
6666
SlotId currentId_;
6767
};
6868

69-
class CollectionImpl {
70-
protected:
71-
VariantData* data_;
72-
ResourceManager* resources_;
73-
74-
public:
75-
using iterator = CollectionIterator;
76-
77-
CollectionImpl() : data_(nullptr), resources_(nullptr) {}
78-
79-
CollectionImpl(VariantData* data, ResourceManager* resources)
80-
: data_(data), resources_(resources) {}
81-
82-
explicit operator bool() const {
83-
return data_ && data_->isCollection();
84-
}
85-
86-
bool isNull() const {
87-
return !operator bool();
88-
}
89-
90-
VariantData* getData() const {
91-
return data_;
92-
}
93-
94-
ResourceManager* getResourceManager() const {
95-
return resources_;
96-
}
97-
98-
iterator createIterator() const {
99-
if (isNull())
100-
return iterator();
101-
return createIterator(data_, resources_);
102-
}
103-
104-
static iterator createIterator(VariantData*, ResourceManager*);
105-
106-
size_t size() const;
107-
size_t nesting() const;
108-
109-
void clear() {
110-
if (isNull())
111-
return;
112-
clear(data_, resources_);
113-
}
114-
115-
static void clear(VariantData*, ResourceManager*);
116-
117-
SlotId head() const {
118-
ARDUINOJSON_ASSERT(data_ != nullptr);
119-
ARDUINOJSON_ASSERT(data_->isCollection());
120-
return data_->content.asCollection.head;
121-
}
122-
123-
static void appendOne(Slot<VariantData> slot, VariantData*, ResourceManager*);
124-
125-
static void appendPair(Slot<VariantData> key, Slot<VariantData> value,
126-
VariantData*, ResourceManager*);
127-
128-
void removeOne(iterator it);
129-
void removePair(iterator it);
130-
131-
private:
132-
Slot<VariantData> getPreviousSlot(VariantData*) const;
133-
};
134-
13569
ARDUINOJSON_END_PRIVATE_NAMESPACE

src/ArduinoJson/Collection/CollectionImpl.hpp

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ inline void CollectionIterator::next(const ResourceManager* resources) {
1919
currentId_ = nextId;
2020
}
2121

22-
inline CollectionImpl::iterator CollectionImpl::createIterator(
22+
inline VariantImpl::iterator VariantImpl::createIterator(
2323
VariantData* data, ResourceManager* resources) {
2424
ARDUINOJSON_ASSERT(data != nullptr);
2525
ARDUINOJSON_ASSERT(data->isCollection());
@@ -28,8 +28,8 @@ inline CollectionImpl::iterator CollectionImpl::createIterator(
2828
return iterator(resources->getVariant(head), head);
2929
}
3030

31-
inline void CollectionImpl::appendOne(Slot<VariantData> slot, VariantData* data,
32-
ResourceManager* resources) {
31+
inline void VariantImpl::appendOne(Slot<VariantData> slot, VariantData* data,
32+
ResourceManager* resources) {
3333
ARDUINOJSON_ASSERT(data != nullptr);
3434
ARDUINOJSON_ASSERT(data->isCollection());
3535
ARDUINOJSON_ASSERT(resources != nullptr);
@@ -46,10 +46,9 @@ inline void CollectionImpl::appendOne(Slot<VariantData> slot, VariantData* data,
4646
}
4747
}
4848

49-
inline void CollectionImpl::appendPair(Slot<VariantData> key,
50-
Slot<VariantData> value,
51-
VariantData* data,
52-
ResourceManager* resources) {
49+
inline void VariantImpl::appendPair(Slot<VariantData> key,
50+
Slot<VariantData> value, VariantData* data,
51+
ResourceManager* resources) {
5352
ARDUINOJSON_ASSERT(data != nullptr);
5453
ARDUINOJSON_ASSERT(resources != nullptr);
5554

@@ -67,8 +66,7 @@ inline void CollectionImpl::appendPair(Slot<VariantData> key,
6766
}
6867
}
6968

70-
inline void CollectionImpl::clear(VariantData* data,
71-
ResourceManager* resources) {
69+
inline void VariantImpl::empty(VariantData* data, ResourceManager* resources) {
7270
ARDUINOJSON_ASSERT(data != nullptr);
7371
ARDUINOJSON_ASSERT(data->isCollection());
7472
ARDUINOJSON_ASSERT(resources != nullptr);
@@ -87,7 +85,7 @@ inline void CollectionImpl::clear(VariantData* data,
8785
coll->tail = NULL_SLOT;
8886
}
8987

90-
inline Slot<VariantData> CollectionImpl::getPreviousSlot(
88+
inline Slot<VariantData> VariantImpl::getPreviousSlot(
9189
VariantData* target) const {
9290
ARDUINOJSON_ASSERT(data_ != nullptr);
9391
ARDUINOJSON_ASSERT(data_->isCollection());
@@ -105,7 +103,7 @@ inline Slot<VariantData> CollectionImpl::getPreviousSlot(
105103
return prev;
106104
}
107105

108-
inline void CollectionImpl::removeOne(iterator it) {
106+
inline void VariantImpl::removeOne(iterator it) {
109107
if (it.done())
110108
return;
111109
auto curr = it.slot_;
@@ -121,7 +119,7 @@ inline void CollectionImpl::removeOne(iterator it) {
121119
resources_->freeVariant({it.slot_, it.currentId_});
122120
}
123121

124-
inline void CollectionImpl::removePair(iterator it) {
122+
inline void VariantImpl::removePair(iterator it) {
125123
if (it.done())
126124
return;
127125

@@ -138,7 +136,7 @@ inline void CollectionImpl::removePair(iterator it) {
138136
removeOne(it);
139137
}
140138

141-
inline size_t CollectionImpl::nesting() const {
139+
inline size_t VariantImpl::nesting() const {
142140
if (!data_ || !data_->isCollection())
143141
return 0;
144142
size_t maxChildNesting = 0;
@@ -150,11 +148,4 @@ inline size_t CollectionImpl::nesting() const {
150148
return maxChildNesting + 1;
151149
}
152150

153-
inline size_t CollectionImpl::size() const {
154-
size_t count = 0;
155-
for (auto it = createIterator(); !it.done(); it.next(resources_))
156-
count++;
157-
return count;
158-
}
159-
160151
ARDUINOJSON_END_PRIVATE_NAMESPACE

src/ArduinoJson/Object/ObjectImpl.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ inline VariantImpl::iterator VariantImpl::findKey(TAdaptedString key,
4444
if (key.isNull())
4545
return iterator();
4646
bool isKey = true;
47-
for (auto it = CollectionImpl::createIterator(data, resources); !it.done();
47+
for (auto it = createIterator(data, resources); !it.done();
4848
it.next(resources)) {
4949
if (isKey && stringEquals(key, adaptString(it->asString())))
5050
return it;
@@ -72,7 +72,7 @@ inline VariantData* VariantImpl::addMember(TAdaptedString key,
7272
if (!VariantImpl::setString(key, keySlot.ptr(), resources))
7373
return nullptr;
7474

75-
CollectionImpl::appendPair(keySlot, valueSlot, data, resources);
75+
appendPair(keySlot, valueSlot, data, resources);
7676

7777
return valueSlot.ptr();
7878
}
@@ -93,7 +93,7 @@ inline VariantData* VariantImpl::addPair(VariantData** value, VariantData* data,
9393
return nullptr;
9494
*value = valueSlot.ptr();
9595

96-
CollectionImpl::appendPair(keySlot, valueSlot, data, resources);
96+
appendPair(keySlot, valueSlot, data, resources);
9797

9898
return keySlot.ptr();
9999
}

src/ArduinoJson/Variant/VariantImpl.hpp

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,6 @@ class VariantImpl {
169169
}
170170
}
171171

172-
CollectionImpl asCollection() const {
173-
return CollectionImpl(data_, resources_);
174-
}
175-
176172
template <typename T>
177173
T asFloat() const {
178174
return asFloat<T>(data_, resources_);
@@ -272,9 +268,13 @@ class VariantImpl {
272268
iterator at(size_t index) const;
273269

274270
iterator createIterator() const {
275-
return asCollection().createIterator();
271+
if (!isCollection())
272+
return iterator();
273+
return createIterator(data_, resources_);
276274
}
277275

276+
static iterator createIterator(VariantData*, ResourceManager*);
277+
278278
#if ARDUINOJSON_USE_8_BYTE_POOL
279279
static const EightByteValue* getEightByte(VariantData* data,
280280
ResourceManager* resources) {
@@ -363,23 +363,21 @@ class VariantImpl {
363363
return type() == VariantType::Object;
364364
}
365365

366-
size_t nesting() const {
367-
return asCollection().nesting();
368-
}
366+
size_t nesting() const;
369367

370368
void removeElement(size_t index);
371369

372370
void removeElement(CollectionIterator it) {
373-
asCollection().removeOne(it);
371+
removeOne(it);
374372
}
375373

376374
template <typename TAdaptedString>
377375
void removeMember(TAdaptedString key) {
378-
asCollection().removePair(findKey(key));
376+
removePair(findKey(key));
379377
}
380378

381379
void removeMember(CollectionIterator it) {
382-
asCollection().removePair(it);
380+
removePair(it);
383381
}
384382

385383
bool setBoolean(bool value) {
@@ -539,17 +537,21 @@ class VariantImpl {
539537
}
540538

541539
size_t size() const {
542-
if (!data_)
540+
if (!isCollection())
543541
return 0;
544542

545543
return size(data_, resources_);
546544
}
547545

548546
static size_t size(VariantData* data, ResourceManager* resources) {
549547
ARDUINOJSON_ASSERT(data != nullptr);
548+
ARDUINOJSON_ASSERT(data->isCollection());
550549
ARDUINOJSON_ASSERT(resources != nullptr);
551550

552-
size_t n = CollectionImpl(data, resources).size();
551+
size_t n = 0;
552+
for (auto it = createIterator(data, resources); !it.done();
553+
it.next(resources))
554+
n++;
553555

554556
if (data->type == VariantType::Object) {
555557
ARDUINOJSON_ASSERT((n % 2) == 0);
@@ -598,16 +600,19 @@ class VariantImpl {
598600
#endif
599601

600602
if (data->type & VariantTypeBits::CollectionMask)
601-
CollectionImpl::clear(data, resources);
603+
empty(data, resources);
602604

603605
data->type = VariantType::Null;
604606
}
605607

606608
void empty() {
607-
if (isCollection())
608-
CollectionImpl::clear(data_, resources_);
609+
if (!isCollection())
610+
return;
611+
empty(data_, resources_);
609612
}
610613

614+
static void empty(VariantData*, ResourceManager*);
615+
611616
private:
612617
VariantData* data_;
613618
ResourceManager* resources_;
@@ -621,6 +626,16 @@ class VariantImpl {
621626

622627
template <typename TAdaptedString>
623628
static iterator findKey(TAdaptedString key, VariantData*, ResourceManager*);
629+
630+
static void appendOne(Slot<VariantData> slot, VariantData*, ResourceManager*);
631+
632+
static void appendPair(Slot<VariantData> key, Slot<VariantData> value,
633+
VariantData*, ResourceManager*);
634+
635+
void removeOne(iterator it);
636+
void removePair(iterator it);
637+
638+
Slot<VariantData> getPreviousSlot(VariantData*) const;
624639
};
625640

626641
ARDUINOJSON_END_PRIVATE_NAMESPACE

0 commit comments

Comments
 (0)