forked from bblanchon/ArduinoJson
Add memoryUsage()
to ElementProxy
and MemberProxy
(fixes #1730)
This commit is contained in:
@ -1,6 +1,12 @@
|
|||||||
ArduinoJson: change log
|
ArduinoJson: change log
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
|
HEAD
|
||||||
|
----
|
||||||
|
|
||||||
|
* Add `ElementProxy::memoryUsage()`
|
||||||
|
* Add `MemberProxy::memoryUsage()` (issue #1730)
|
||||||
|
|
||||||
v6.19.3 (2022-03-08)
|
v6.19.3 (2022-03-08)
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
@ -205,4 +205,26 @@ TEST_CASE("DynamicJsonDocument assignment") {
|
|||||||
REQUIRE_JSON(doc2, "42");
|
REQUIRE_JSON(doc2, "42");
|
||||||
REQUIRE(doc2.capacity() == 4096);
|
REQUIRE(doc2.capacity() == 4096);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("Assign from MemberProxy") {
|
||||||
|
StaticJsonDocument<200> doc1;
|
||||||
|
doc1["value"] = 42;
|
||||||
|
|
||||||
|
DynamicJsonDocument doc2(4096);
|
||||||
|
doc2 = doc1["value"];
|
||||||
|
|
||||||
|
REQUIRE_JSON(doc2, "42");
|
||||||
|
REQUIRE(doc2.capacity() == 4096);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Assign from ElementProxy") {
|
||||||
|
StaticJsonDocument<200> doc1;
|
||||||
|
doc1[0] = 42;
|
||||||
|
|
||||||
|
DynamicJsonDocument doc2(4096);
|
||||||
|
doc2 = doc1[0];
|
||||||
|
|
||||||
|
REQUIRE_JSON(doc2, "42");
|
||||||
|
REQUIRE(doc2.capacity() == 4096);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -188,6 +188,21 @@ TEST_CASE("ElementProxy::size()") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("ElementProxy::memoryUsage()") {
|
||||||
|
DynamicJsonDocument doc(4096);
|
||||||
|
doc.addElement();
|
||||||
|
ElementProxy<JsonDocument&> ep = doc[0];
|
||||||
|
|
||||||
|
SECTION("returns 0 for null") {
|
||||||
|
REQUIRE(ep.memoryUsage() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("returns size for string") {
|
||||||
|
ep.set(std::string("hello"));
|
||||||
|
REQUIRE(ep.memoryUsage() == 6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE("ElementProxy::operator[]") {
|
TEST_CASE("ElementProxy::operator[]") {
|
||||||
DynamicJsonDocument doc(4096);
|
DynamicJsonDocument doc(4096);
|
||||||
ElementProxy<JsonDocument&> ep = doc[1];
|
ElementProxy<JsonDocument&> ep = doc[1];
|
||||||
|
@ -229,6 +229,20 @@ TEST_CASE("MemberProxy::size()") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("MemberProxy::memoryUsage()") {
|
||||||
|
DynamicJsonDocument doc(4096);
|
||||||
|
MemberProxy<JsonDocument &, const char *> mp = doc["hello"];
|
||||||
|
|
||||||
|
SECTION("returns 0 when null") {
|
||||||
|
REQUIRE(mp.memoryUsage() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("return the size for a string") {
|
||||||
|
mp.set(std::string("hello"));
|
||||||
|
REQUIRE(mp.memoryUsage() == 6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE("MemberProxy::operator[]") {
|
TEST_CASE("MemberProxy::operator[]") {
|
||||||
DynamicJsonDocument doc(4096);
|
DynamicJsonDocument doc(4096);
|
||||||
MemberProxy<JsonDocument &, const char *> mp = doc["hello"];
|
MemberProxy<JsonDocument &, const char *> mp = doc["hello"];
|
||||||
|
@ -118,6 +118,10 @@ class ElementProxy : public VariantOperators<ElementProxy<TArray> >,
|
|||||||
return getUpstreamElement().size();
|
return getUpstreamElement().size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FORCE_INLINE size_t memoryUsage() const {
|
||||||
|
return getUpstreamElement().memoryUsage();
|
||||||
|
}
|
||||||
|
|
||||||
template <typename TNestedKey>
|
template <typename TNestedKey>
|
||||||
VariantRef getMember(TNestedKey* key) const {
|
VariantRef getMember(TNestedKey* key) const {
|
||||||
return getUpstreamElement().getMember(key);
|
return getUpstreamElement().getMember(key);
|
||||||
|
@ -94,6 +94,10 @@ class MemberProxy : public VariantOperators<MemberProxy<TObject, TStringRef> >,
|
|||||||
return getUpstreamMember().size();
|
return getUpstreamMember().size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FORCE_INLINE size_t memoryUsage() const {
|
||||||
|
return getUpstreamMember().memoryUsage();
|
||||||
|
}
|
||||||
|
|
||||||
FORCE_INLINE void remove(size_t index) const {
|
FORCE_INLINE void remove(size_t index) const {
|
||||||
getUpstreamMember().remove(index);
|
getUpstreamMember().remove(index);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user