mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +01:00 
			
		
		
		
	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