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 | ||||
| ======================= | ||||
|  | ||||
| HEAD | ||||
| ---- | ||||
|  | ||||
| * Add `ElementProxy::memoryUsage()` | ||||
| * Add `MemberProxy::memoryUsage()` (issue #1730) | ||||
|  | ||||
| v6.19.3 (2022-03-08) | ||||
| ------- | ||||
|  | ||||
|   | ||||
| @@ -205,4 +205,26 @@ TEST_CASE("DynamicJsonDocument assignment") { | ||||
|     REQUIRE_JSON(doc2, "42"); | ||||
|     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[]") { | ||||
|   DynamicJsonDocument doc(4096); | ||||
|   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[]") { | ||||
|   DynamicJsonDocument doc(4096); | ||||
|   MemberProxy<JsonDocument &, const char *> mp = doc["hello"]; | ||||
|   | ||||
| @@ -118,6 +118,10 @@ class ElementProxy : public VariantOperators<ElementProxy<TArray> >, | ||||
|     return getUpstreamElement().size(); | ||||
|   } | ||||
|  | ||||
|   FORCE_INLINE size_t memoryUsage() const { | ||||
|     return getUpstreamElement().memoryUsage(); | ||||
|   } | ||||
|  | ||||
|   template <typename TNestedKey> | ||||
|   VariantRef getMember(TNestedKey* key) const { | ||||
|     return getUpstreamElement().getMember(key); | ||||
|   | ||||
| @@ -94,6 +94,10 @@ class MemberProxy : public VariantOperators<MemberProxy<TObject, TStringRef> >, | ||||
|     return getUpstreamMember().size(); | ||||
|   } | ||||
|  | ||||
|   FORCE_INLINE size_t memoryUsage() const { | ||||
|     return getUpstreamMember().memoryUsage(); | ||||
|   } | ||||
|  | ||||
|   FORCE_INLINE void remove(size_t index) const { | ||||
|     getUpstreamMember().remove(index); | ||||
|   } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user