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