Skip to content

Commit 0b9a8b6

Browse files
committed
Replace getData()/getResourceManager() with getImpl()
1 parent f62d6f2 commit 0b9a8b6

20 files changed

+168
-267
lines changed

src/ArduinoJson/Array/ElementProxy.hpp

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,17 @@ class ElementProxy : public VariantRefBase<ElementProxy<TUpstream>>,
5050
: upstream_(src.upstream_), index_(src.index_) {}
5151
// clang-format on
5252

53-
ResourceManager* getResourceManager() const {
54-
return VariantAttorney::getResourceManager(upstream_);
53+
VariantImpl getImpl() const {
54+
auto impl = VariantAttorney::getImpl(upstream_);
55+
return VariantImpl(impl.getElement(index_), impl.getResourceManager());
5556
}
5657

57-
FORCE_INLINE VariantData* getData() const {
58-
return VariantAttorney::getVariantImpl(upstream_).getElement(index_);
59-
}
60-
61-
VariantData* getOrCreateData() const {
62-
auto data = VariantAttorney::getOrCreateData(upstream_);
63-
auto resources = VariantAttorney::getResourceManager(upstream_);
64-
if (!data)
65-
return nullptr;
66-
data->getOrCreateArray();
67-
return VariantImpl(data, resources).getOrAddElement(index_);
58+
VariantImpl getOrCreateImpl() const {
59+
auto impl = VariantAttorney::getOrCreateImpl(upstream_);
60+
auto data = impl.getData();
61+
if (data)
62+
data->getOrCreateArray();
63+
return VariantImpl(impl.getOrAddElement(index_), impl.getResourceManager());
6864
}
6965

7066
TUpstream upstream_;

src/ArduinoJson/Array/JsonArray.hpp

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
2222
// Constructs an unbound reference.
2323
JsonArray() {}
2424

25-
// INTERNAL USE ONLY
26-
JsonArray(detail::VariantData* data, detail::ResourceManager* resources)
27-
: impl_(data, resources) {}
28-
2925
// INTERNAL USE ONLY
3026
JsonArray(detail::VariantImpl impl) : impl_(impl) {}
3127

@@ -199,16 +195,12 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
199195
}
200196

201197
private:
202-
detail::ResourceManager* getResourceManager() const {
203-
return impl_.getResourceManager();
204-
}
205-
206-
detail::VariantData* getData() const {
207-
return impl_.getData();
198+
const detail::VariantImpl& getImpl() const {
199+
return impl_;
208200
}
209201

210-
detail::VariantData* getOrCreateData() const {
211-
return impl_.getData();
202+
const detail::VariantImpl& getOrCreateImpl() const {
203+
return impl_;
212204
}
213205

214206
mutable detail::VariantImpl impl_;

src/ArduinoJson/Array/JsonArrayConst.hpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
3636
// Creates an unbound reference.
3737
JsonArrayConst() {}
3838

39-
// INTERNAL USE ONLY
40-
JsonArrayConst(detail::VariantData* data, detail::ResourceManager* resources)
41-
: impl_(data, resources) {}
42-
4339
// INTERNAL USE ONLY
4440
JsonArrayConst(const detail::VariantImpl& impl) : impl_(impl) {}
4541

@@ -98,8 +94,8 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
9894
}
9995

10096
private:
101-
const detail::VariantData* getData() const {
102-
return impl_.getData();
97+
const detail::VariantImpl& getImpl() const {
98+
return impl_;
10399
}
104100

105101
detail::VariantImpl impl_;

src/ArduinoJson/Deserialization/deserialize.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ template <template <typename> class TDeserializer, typename TDestination,
4444
typename TReader, typename TOptions>
4545
DeserializationError doDeserialize(TDestination&& dst, TReader reader,
4646
TOptions options) {
47-
auto data = VariantAttorney::getOrCreateData(dst);
48-
if (!data)
47+
auto impl = VariantAttorney::getOrCreateImpl(dst);
48+
if (impl.getData() == nullptr)
4949
return DeserializationError::NoMemory;
50-
auto resources = VariantAttorney::getResourceManager(dst);
50+
auto resources = impl.getResourceManager();
5151
dst.clear();
5252
auto err = TDeserializer<TReader>(resources, reader)
53-
.parse(data, options.filter, options.nestingLimit);
53+
.parse(impl.getData(), options.filter, options.nestingLimit);
5454
shrinkJsonDocument(dst);
5555
return err;
5656
}

src/ArduinoJson/Document/JsonDocument.hpp

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,13 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
120120
// Returns the depth (nesting level) of the array.
121121
// https://arduinojson.org/v7/api/jsondocument/nesting/
122122
size_t nesting() const {
123-
return getVariantImpl().nesting();
123+
return getImpl().nesting();
124124
}
125125

126126
// Returns the number of elements in the root array or object.
127127
// https://arduinojson.org/v7/api/jsondocument/size/
128128
size_t size() const {
129-
return getVariantImpl().size();
129+
return getImpl().size();
130130
}
131131

132132
// Copies the specified document.
@@ -165,7 +165,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
165165
template <typename TChar>
166166
ARDUINOJSON_DEPRECATED("use doc[\"key\"].is<T>() instead")
167167
bool containsKey(TChar* key) const {
168-
return getVariantImpl().getMember(detail::adaptString(key)) != 0;
168+
return getImpl().getMember(detail::adaptString(key)) != 0;
169169
}
170170

171171
// DEPRECATED: use obj[key].is<T>() instead
@@ -174,7 +174,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
174174
detail::enable_if_t<detail::IsString<TString>::value, int> = 0>
175175
ARDUINOJSON_DEPRECATED("use doc[key].is<T>() instead")
176176
bool containsKey(const TString& key) const {
177-
return getVariantImpl().getMember(detail::adaptString(key)) != 0;
177+
return getImpl().getMember(detail::adaptString(key)) != 0;
178178
}
179179

180180
// DEPRECATED: use obj[key].is<T>() instead
@@ -211,8 +211,8 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
211211
template <typename TString,
212212
detail::enable_if_t<detail::IsString<TString>::value, int> = 0>
213213
JsonVariantConst operator[](const TString& key) const {
214-
return JsonVariantConst(
215-
getVariantImpl().getMember(detail::adaptString(key)), &resources_);
214+
return JsonVariantConst(getImpl().getMember(detail::adaptString(key)),
215+
&resources_);
216216
}
217217

218218
// Gets a root object's member.
@@ -222,8 +222,8 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
222222
!detail::is_const<TChar>::value,
223223
int> = 0>
224224
JsonVariantConst operator[](TChar* key) const {
225-
return JsonVariantConst(
226-
getVariantImpl().getMember(detail::adaptString(key)), &resources_);
225+
return JsonVariantConst(getImpl().getMember(detail::adaptString(key)),
226+
&resources_);
227227
}
228228

229229
// Gets or sets a root array's element.
@@ -237,7 +237,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
237237
// Gets a root array's member.
238238
// https://arduinojson.org/v7/api/jsondocument/subscript/
239239
JsonVariantConst operator[](size_t index) const {
240-
return JsonVariantConst(getVariantImpl().getElement(index), &resources_);
240+
return JsonVariantConst(getImpl().getElement(index), &resources_);
241241
}
242242

243243
// Gets or sets a root object's member.
@@ -290,7 +290,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
290290
template <typename T,
291291
detail::enable_if_t<detail::is_integral<T>::value, int> = 0>
292292
void remove(T index) {
293-
getVariantImpl().removeElement(size_t(index));
293+
getImpl().removeElement(size_t(index));
294294
}
295295

296296
// Removes a member of the root object.
@@ -300,15 +300,15 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
300300
!detail::is_const<TChar>::value,
301301
int> = 0>
302302
void remove(TChar* key) {
303-
getVariantImpl().removeMember(detail::adaptString(key));
303+
getImpl().removeMember(detail::adaptString(key));
304304
}
305305

306306
// Removes a member of the root object.
307307
// https://arduinojson.org/v7/api/jsondocument/remove/
308308
template <typename TString,
309309
detail::enable_if_t<detail::IsString<TString>::value, int> = 0>
310310
void remove(const TString& key) {
311-
getVariantImpl().removeMember(detail::adaptString(key));
311+
getImpl().removeMember(detail::adaptString(key));
312312
}
313313

314314
// Removes a member of the root object or an element of the root array.
@@ -388,16 +388,16 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
388388
}
389389

390390
private:
391-
detail::VariantImpl getVariantImpl() const {
392-
return detail::VariantImpl(&data_, &resources_);
391+
detail::VariantImpl getImpl() const {
392+
return {&data_, &resources_};
393393
}
394394

395-
detail::VariantImpl getOrCreateArray() {
396-
return detail::VariantImpl(data_.getOrCreateArray(), &resources_);
395+
detail::VariantImpl getOrCreateImpl() {
396+
return {&data_, &resources_};
397397
}
398398

399-
detail::VariantImpl getOrCreateObject() {
400-
return detail::VariantImpl(data_.getOrCreateObject(), &resources_);
399+
detail::VariantImpl getOrCreateArray() {
400+
return detail::VariantImpl(data_.getOrCreateArray(), &resources_);
401401
}
402402

403403
JsonVariant getVariant() {
@@ -408,22 +408,6 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
408408
return JsonVariantConst(&data_, &resources_);
409409
}
410410

411-
detail::ResourceManager* getResourceManager() {
412-
return &resources_;
413-
}
414-
415-
detail::VariantData* getData() {
416-
return &data_;
417-
}
418-
419-
const detail::VariantData* getData() const {
420-
return &data_;
421-
}
422-
423-
detail::VariantData* getOrCreateData() {
424-
return &data_;
425-
}
426-
427411
mutable detail::ResourceManager resources_;
428412
mutable detail::VariantData data_;
429413
};

src/ArduinoJson/MsgPack/MsgPackBinary.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@ class MsgPackBinary {
2525
template <>
2626
struct Converter<MsgPackBinary> : private detail::VariantAttorney {
2727
static void toJson(MsgPackBinary src, JsonVariant dst) {
28-
auto data = VariantAttorney::getData(dst);
28+
auto impl = getImpl(dst);
29+
auto data = impl.getData();
2930
if (!data)
3031
return;
31-
auto resources = getResourceManager(dst);
32-
detail::VariantImpl(data, resources).clear();
32+
auto resources = impl.getResourceManager();
33+
impl.clear();
3334
if (src.data()) {
3435
size_t headerSize = src.size() >= 0x10000 ? 5
3536
: src.size() >= 0x100 ? 3
@@ -66,7 +67,7 @@ struct Converter<MsgPackBinary> : private detail::VariantAttorney {
6667
}
6768

6869
static MsgPackBinary fromJson(JsonVariantConst src) {
69-
auto variant = VariantAttorney::getVariantImpl(src);
70+
auto variant = getImpl(src);
7071
auto rawstr = variant.asRawString();
7172
auto p = reinterpret_cast<const uint8_t*>(rawstr.c_str());
7273
auto n = rawstr.size();

src/ArduinoJson/MsgPack/MsgPackExtension.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@ class MsgPackExtension {
3131
template <>
3232
struct Converter<MsgPackExtension> : private detail::VariantAttorney {
3333
static void toJson(MsgPackExtension src, JsonVariant dst) {
34-
auto data = getData(dst);
34+
auto impl = getImpl(dst);
35+
auto data = impl.getData();
36+
auto resources = impl.getResourceManager();
3537
if (!data)
3638
return;
37-
auto resources = getResourceManager(dst);
38-
detail::VariantImpl(data, resources).clear();
39+
impl.clear();
3940
if (src.data()) {
4041
uint8_t format, sizeBytes;
4142
if (src.size() >= 0x10000) {
@@ -80,7 +81,7 @@ struct Converter<MsgPackExtension> : private detail::VariantAttorney {
8081
}
8182

8283
static MsgPackExtension fromJson(JsonVariantConst src) {
83-
auto variant = VariantAttorney::getVariantImpl(src);
84+
auto variant = detail::VariantAttorney::getImpl(src);
8485
auto rawstr = variant.asRawString();
8586
if (rawstr.size() == 0)
8687
return {};

src/ArduinoJson/Object/JsonObject.hpp

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
2222
// Creates an unbound reference.
2323
JsonObject() {}
2424

25-
// INTERNAL USE ONLY
26-
JsonObject(detail::VariantData* data, detail::ResourceManager* resource)
27-
: impl_(data, resource) {}
28-
2925
// INTERNAL USE ONLY
3026
JsonObject(detail::VariantImpl impl) : impl_(impl) {}
3127

@@ -222,16 +218,12 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
222218
}
223219

224220
private:
225-
detail::ResourceManager* getResourceManager() const {
226-
return impl_.getResourceManager();
227-
}
228-
229-
detail::VariantData* getData() const {
230-
return impl_.getData();
221+
const detail::VariantImpl& getImpl() const {
222+
return impl_;
231223
}
232224

233-
detail::VariantData* getOrCreateData() const {
234-
return impl_.getData();
225+
const detail::VariantImpl& getOrCreateImpl() const {
226+
return impl_;
235227
}
236228

237229
mutable detail::VariantImpl impl_;

src/ArduinoJson/Object/JsonObjectConst.hpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
2121
// Creates an unbound reference.
2222
JsonObjectConst() {}
2323

24-
// INTERNAL USE ONLY
25-
JsonObjectConst(detail::VariantData* data, detail::ResourceManager* resources)
26-
: impl_(data, resources) {}
27-
2824
// INTERNAL USE ONLY
2925
JsonObjectConst(const detail::VariantImpl& impl) : impl_(impl) {}
3026

@@ -132,8 +128,8 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
132128
}
133129

134130
private:
135-
const detail::VariantData* getData() const {
136-
return impl_.getData();
131+
const detail::VariantImpl& getImpl() const {
132+
return impl_;
137133
}
138134

139135
detail::VariantImpl impl_;

src/ArduinoJson/Object/MemberProxy.hpp

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,17 @@ class MemberProxy
5151
: upstream_(src.upstream_), key_(src.key_) {}
5252
// clang-format on
5353

54-
ResourceManager* getResourceManager() const {
55-
return VariantAttorney::getResourceManager(upstream_);
54+
VariantImpl getImpl() const {
55+
auto impl = VariantAttorney::getImpl(upstream_);
56+
return VariantImpl(impl.getMember(key_), impl.getResourceManager());
5657
}
5758

58-
VariantData* getData() const {
59-
return VariantAttorney::getVariantImpl(upstream_).getMember(key_);
60-
}
61-
62-
VariantData* getOrCreateData() const {
63-
auto data = VariantAttorney::getOrCreateData(upstream_);
64-
auto resources = VariantAttorney::getResourceManager(upstream_);
65-
if (!data)
66-
return nullptr;
67-
data->getOrCreateObject();
68-
return VariantImpl(data, resources).getOrAddMember(key_);
59+
VariantImpl getOrCreateImpl() const {
60+
auto impl = VariantAttorney::getOrCreateImpl(upstream_);
61+
auto data = impl.getData();
62+
if (data)
63+
data->getOrCreateObject();
64+
return VariantImpl(impl.getOrAddMember(key_), impl.getResourceManager());
6965
}
7066

7167
private:

0 commit comments

Comments
 (0)