mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Extracted class JsonHashTableBase to reduce the size of the code.
This commit is contained in:
		| @@ -5,6 +5,7 @@ | |||||||
|  |  | ||||||
| // This file is here to help the Arduino IDE find the .cpp files | // This file is here to help the Arduino IDE find the .cpp files | ||||||
|  |  | ||||||
|  | #include "JsonGenerator/EscapedString.cpp" | ||||||
| #include "JsonGenerator/JsonValue.cpp" | #include "JsonGenerator/JsonValue.cpp" | ||||||
| #include "JsonGenerator/StringBuilder.cpp" | #include "JsonGenerator/JsonHashTableBase.cpp" | ||||||
| #include "JsonGenerator/EscapedString.cpp" | #include "JsonGenerator/StringBuilder.cpp" | ||||||
| @@ -5,78 +5,23 @@ | |||||||
|  |  | ||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
| #include "EscapedString.h" | #include "JsonHashTableBase.h" | ||||||
| #include "JsonObjectBase.h" |  | ||||||
|  |  | ||||||
| namespace ArduinoJson | namespace ArduinoJson | ||||||
| { | { | ||||||
|     namespace Generator |     namespace Generator | ||||||
|     { |     { | ||||||
|         template<int N> |         template<int N> | ||||||
|         class JsonHashTable : public JsonObjectBase |         class JsonHashTable : public JsonHashTableBase | ||||||
|         { |         { | ||||||
|         public: |         public: | ||||||
|  |  | ||||||
|             JsonHashTable() |             JsonHashTable() | ||||||
|  |                 : JsonHashTableBase(items, N) | ||||||
|             { |             { | ||||||
|                 itemCount = 0; |             }             | ||||||
|             } |  | ||||||
|  |  | ||||||
|             template<typename T> |  | ||||||
|             void add(const char* key, T value) |  | ||||||
|             { |  | ||||||
|                 if (itemCount >= N) return; |  | ||||||
|  |  | ||||||
|                 items[itemCount].key.set(key); |  | ||||||
|                 items[itemCount].value.set(value); |  | ||||||
|                 itemCount++; |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             template<int DIGITS> |  | ||||||
|             void add(const char* key, double value) |  | ||||||
|             { |  | ||||||
|                 if (itemCount >= N) return; |  | ||||||
|  |  | ||||||
|                 items[itemCount].key.set(key); |  | ||||||
|                 items[itemCount].value.set<DIGITS>(value); |  | ||||||
|                 itemCount++; |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             using JsonObjectBase::printTo; |  | ||||||
|  |  | ||||||
|         private: |         private: | ||||||
|  |             KeyValuePair items[N];      | ||||||
|             struct KeyValuePair |  | ||||||
|             { |  | ||||||
|                 Internals::EscapedString  key; |  | ||||||
|                 Internals::JsonValue      value; |  | ||||||
|             }; |  | ||||||
|  |  | ||||||
|             KeyValuePair items[N]; |  | ||||||
|             int itemCount; |  | ||||||
|  |  | ||||||
|             virtual size_t printTo(Print& p) const |  | ||||||
|             { |  | ||||||
|                 size_t n = 0; |  | ||||||
|  |  | ||||||
|                 n += p.write('{'); |  | ||||||
|  |  | ||||||
|                 for (int i = 0; i < itemCount; i++) |  | ||||||
|                 { |  | ||||||
|                     if (i > 0) |  | ||||||
|                     { |  | ||||||
|                         n += p.write(','); |  | ||||||
|                     } |  | ||||||
|  |  | ||||||
|                     n += items[i].key.printTo(p); |  | ||||||
|                     n += p.write(':'); |  | ||||||
|                     n += items[i].value.printTo(p); |  | ||||||
|                 } |  | ||||||
|  |  | ||||||
|                 n += p.write('}'); |  | ||||||
|  |  | ||||||
|                 return n; |  | ||||||
|             } |  | ||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
| } | } | ||||||
							
								
								
									
										26
									
								
								JsonGenerator/JsonHashTableBase.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								JsonGenerator/JsonHashTableBase.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | #include "JsonHashTable.h" | ||||||
|  |  | ||||||
|  | using namespace ArduinoJson::Generator; | ||||||
|  |  | ||||||
|  | size_t JsonHashTableBase::printTo(Print& p) const | ||||||
|  | { | ||||||
|  |     size_t n = 0; | ||||||
|  |  | ||||||
|  |     n += p.write('{'); | ||||||
|  |  | ||||||
|  |     for (int i = 0; i < itemCount; i++) | ||||||
|  |     { | ||||||
|  |         if (i > 0) | ||||||
|  |         { | ||||||
|  |             n += p.write(','); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         n += items[i].key.printTo(p); | ||||||
|  |         n += p.write(':'); | ||||||
|  |         n += items[i].value.printTo(p); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     n += p.write('}'); | ||||||
|  |  | ||||||
|  |     return n; | ||||||
|  | } | ||||||
							
								
								
									
										62
									
								
								JsonGenerator/JsonHashTableBase.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								JsonGenerator/JsonHashTableBase.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | |||||||
|  | /* | ||||||
|  | * Arduino JSON library | ||||||
|  | * Benoit Blanchon 2014 - MIT License | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include "JsonObjectBase.h" | ||||||
|  | #include "EscapedString.h" | ||||||
|  |  | ||||||
|  | namespace ArduinoJson | ||||||
|  | { | ||||||
|  |     namespace Generator | ||||||
|  |     { | ||||||
|  |         class JsonHashTableBase : public JsonObjectBase | ||||||
|  |         { | ||||||
|  |         public: | ||||||
|  |  | ||||||
|  |             template<typename T> | ||||||
|  |             void add(const char* key, T value) | ||||||
|  |             { | ||||||
|  |                 if (itemCount >= capacity) return; | ||||||
|  |  | ||||||
|  |                 items[itemCount].key.set(key); | ||||||
|  |                 items[itemCount].value.set(value); | ||||||
|  |                 itemCount++; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             template<int DIGITS> | ||||||
|  |             void add(const char* key, double value) | ||||||
|  |             { | ||||||
|  |                 if (itemCount >= capacity) return; | ||||||
|  |  | ||||||
|  |                 items[itemCount].key.set(key); | ||||||
|  |                 items[itemCount].value.set<DIGITS>(value); | ||||||
|  |                 itemCount++; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             using JsonObjectBase::printTo; | ||||||
|  |  | ||||||
|  |             virtual size_t printTo(Print& p) const; | ||||||
|  |  | ||||||
|  |         protected: | ||||||
|  |  | ||||||
|  |             struct KeyValuePair | ||||||
|  |             { | ||||||
|  |                 Internals::EscapedString  key; | ||||||
|  |                 Internals::JsonValue      value; | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             JsonHashTableBase(KeyValuePair* items, int capacity) | ||||||
|  |                 : items(items), capacity(capacity), itemCount(0) | ||||||
|  |             { | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         private: | ||||||
|  |             KeyValuePair* items; | ||||||
|  |             int itemCount; | ||||||
|  |             int capacity; | ||||||
|  |         }; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -164,4 +164,4 @@ This table is for an 8-bit Arduino, types would be bigger on a 32-bit processor. | |||||||
| | Type                   | Size in bytes | | | Type                   | Size in bytes | | ||||||
| | ---------------------- | ------------- | | | ---------------------- | ------------- | | ||||||
| | JsonArray<N>     | 4 + 6 x N     | | | JsonArray<N>     | 4 + 6 x N     | | ||||||
| | JsonHashTable<N> | 4 + 8 x N     | | | JsonHashTable<N> | 8 + 8 x N     | | ||||||
|   | |||||||
| @@ -85,6 +85,7 @@ | |||||||
|   </ItemDefinitionGroup> |   </ItemDefinitionGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClCompile Include="..\JsonGenerator\EscapedString.cpp" /> |     <ClCompile Include="..\JsonGenerator\EscapedString.cpp" /> | ||||||
|  |     <ClCompile Include="..\JsonGenerator\JsonHashTableBase.cpp" /> | ||||||
|     <ClCompile Include="..\JsonGenerator\JsonValue.cpp" /> |     <ClCompile Include="..\JsonGenerator\JsonValue.cpp" /> | ||||||
|     <ClCompile Include="..\JsonGenerator\StringBuilder.cpp" /> |     <ClCompile Include="..\JsonGenerator\StringBuilder.cpp" /> | ||||||
|     <ClCompile Include="JsonArrayTests.cpp" /> |     <ClCompile Include="JsonArrayTests.cpp" /> | ||||||
| @@ -97,6 +98,7 @@ | |||||||
|     <ClInclude Include="..\JsonGenerator\EscapedString.h" /> |     <ClInclude Include="..\JsonGenerator\EscapedString.h" /> | ||||||
|     <ClInclude Include="..\JsonGenerator\JsonArray.h" /> |     <ClInclude Include="..\JsonGenerator\JsonArray.h" /> | ||||||
|     <ClInclude Include="..\JsonGenerator\JsonHashTable.h" /> |     <ClInclude Include="..\JsonGenerator\JsonHashTable.h" /> | ||||||
|  |     <ClInclude Include="..\JsonGenerator\JsonHashTableBase.h" /> | ||||||
|     <ClInclude Include="..\JsonGenerator\JsonObjectBase.h" /> |     <ClInclude Include="..\JsonGenerator\JsonObjectBase.h" /> | ||||||
|     <ClInclude Include="..\JsonGenerator\JsonValue.h" /> |     <ClInclude Include="..\JsonGenerator\JsonValue.h" /> | ||||||
|     <ClInclude Include="..\JsonGenerator\Print.h" /> |     <ClInclude Include="..\JsonGenerator\Print.h" /> | ||||||
|   | |||||||
| @@ -39,6 +39,9 @@ | |||||||
|     <ClCompile Include="..\JsonGenerator\EscapedString.cpp"> |     <ClCompile Include="..\JsonGenerator\EscapedString.cpp"> | ||||||
|       <Filter>Source Files</Filter> |       <Filter>Source Files</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|  |     <ClCompile Include="..\JsonGenerator\JsonHashTableBase.cpp"> | ||||||
|  |       <Filter>Source Files</Filter> | ||||||
|  |     </ClCompile> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClInclude Include="..\JsonGenerator\JsonArray.h"> |     <ClInclude Include="..\JsonGenerator\JsonArray.h"> | ||||||
| @@ -65,5 +68,8 @@ | |||||||
|     <ClInclude Include="..\JsonGenerator\EscapedString.h"> |     <ClInclude Include="..\JsonGenerator\EscapedString.h"> | ||||||
|       <Filter>Header Files</Filter> |       <Filter>Header Files</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|  |     <ClInclude Include="..\JsonGenerator\JsonHashTableBase.h"> | ||||||
|  |       <Filter>Header Files</Filter> | ||||||
|  |     </ClInclude> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
| </Project> | </Project> | ||||||
		Reference in New Issue
	
	Block a user