mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Extracted base class JsonObjectBase
This commit is contained in:
		| @@ -5,33 +5,12 @@ | |||||||
|  |  | ||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
|  | #include "JsonObjectBase.h" | ||||||
| #include "StringBuilder.h" | #include "StringBuilder.h" | ||||||
|  |  | ||||||
| enum JsonObjectType |  | ||||||
| { |  | ||||||
|     JSON_STRING, |  | ||||||
|     JSON_NUMBER, |  | ||||||
|     JSON_BOOLEAN, |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| union JsonObjectValue |  | ||||||
| { |  | ||||||
|     const char* string; |  | ||||||
|     double      number; |  | ||||||
|     bool        boolean; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| struct JsonObject |  | ||||||
| { |  | ||||||
|     JsonObjectType type; |  | ||||||
|     JsonObjectValue value; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template<int N> | template<int N> | ||||||
| class JsonArray | class JsonArray : public JsonObjectBase | ||||||
| { | { | ||||||
|      |  | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     JsonArray() |     JsonArray() | ||||||
|     { |     { | ||||||
| @@ -69,34 +48,14 @@ private: | |||||||
|     JsonObject items[N]; |     JsonObject items[N]; | ||||||
|     int itemCount; |     int itemCount; | ||||||
|  |  | ||||||
|     void writeTo(StringBuilder& sb) |     virtual void writeTo(StringBuilder& sb) | ||||||
|     { |     { | ||||||
|         sb.append("["); |         sb.append("["); | ||||||
|  |  | ||||||
|         for (int i = 0; i < itemCount; i++) |         for (int i = 0; i < itemCount; i++) | ||||||
|         { |         { | ||||||
|             if (i>0) |             if (i>0) sb.append(","); | ||||||
|                 sb.append(","); |             writeObjectTo(items[i], sb); | ||||||
|  |  | ||||||
|             JsonObjectValue value = items[i].value; |  | ||||||
|  |  | ||||||
|             switch (items[i].type) |  | ||||||
|             { |  | ||||||
|             case JSON_STRING: |  | ||||||
|                 if (value.string) |  | ||||||
|                     sb.append("\"%s\"", value.string); |  | ||||||
|                 else |  | ||||||
|                     sb.append("null"); |  | ||||||
|                 break; |  | ||||||
|  |  | ||||||
|             case JSON_NUMBER: |  | ||||||
|                 sb.append("%lg", value.number); |  | ||||||
|                 break; |  | ||||||
|  |  | ||||||
|             case JSON_BOOLEAN: |  | ||||||
|                 sb.append(value.boolean ? "true" : "false"); |  | ||||||
|                 break; |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         sb.append("]"); |         sb.append("]"); | ||||||
|   | |||||||
| @@ -84,10 +84,12 @@ | |||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClCompile Include="JsonArray.cpp" /> |     <ClCompile Include="JsonArray.cpp" /> | ||||||
|     <ClCompile Include="JsonArrayTests.cpp" /> |     <ClCompile Include="JsonArrayTests.cpp" /> | ||||||
|  |     <ClCompile Include="JsonObjectBase.cpp" /> | ||||||
|     <ClCompile Include="StringBuilder.cpp" /> |     <ClCompile Include="StringBuilder.cpp" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClInclude Include="JsonArray.h" /> |     <ClInclude Include="JsonArray.h" /> | ||||||
|  |     <ClInclude Include="JsonObjectBase.h" /> | ||||||
|     <ClInclude Include="StringBuilder.h" /> |     <ClInclude Include="StringBuilder.h" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||||
|   | |||||||
| @@ -24,6 +24,9 @@ | |||||||
|     <ClCompile Include="StringBuilder.cpp"> |     <ClCompile Include="StringBuilder.cpp"> | ||||||
|       <Filter>Source Files</Filter> |       <Filter>Source Files</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|  |     <ClCompile Include="JsonObjectBase.cpp"> | ||||||
|  |       <Filter>Source Files</Filter> | ||||||
|  |     </ClCompile> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClInclude Include="JsonArray.h"> |     <ClInclude Include="JsonArray.h"> | ||||||
| @@ -32,5 +35,8 @@ | |||||||
|     <ClInclude Include="StringBuilder.h"> |     <ClInclude Include="StringBuilder.h"> | ||||||
|       <Filter>Header Files</Filter> |       <Filter>Header Files</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|  |     <ClInclude Include="JsonObjectBase.h"> | ||||||
|  |       <Filter>Header Files</Filter> | ||||||
|  |     </ClInclude> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
| </Project> | </Project> | ||||||
							
								
								
									
										1
									
								
								JsonGeneratorTests/JsonObjectBase.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								JsonGeneratorTests/JsonObjectBase.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | #include "JsonObjectBase.h" | ||||||
							
								
								
									
										60
									
								
								JsonGeneratorTests/JsonObjectBase.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								JsonGeneratorTests/JsonObjectBase.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | |||||||
|  | /* | ||||||
|  |  * Arduino JSON library | ||||||
|  |  * Benoit Blanchon 2014 - MIT License | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include "StringBuilder.h" | ||||||
|  |  | ||||||
|  | class JsonObjectBase | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |  | ||||||
|  |  | ||||||
|  | protected: | ||||||
|  |  | ||||||
|  |     virtual void writeTo(StringBuilder& sb) = 0; | ||||||
|  |  | ||||||
|  |     enum JsonObjectType | ||||||
|  |     { | ||||||
|  |         JSON_STRING, | ||||||
|  |         JSON_NUMBER, | ||||||
|  |         JSON_BOOLEAN, | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     union JsonObjectValue | ||||||
|  |     { | ||||||
|  |         const char* string; | ||||||
|  |         double      number; | ||||||
|  |         bool        boolean; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     struct JsonObject | ||||||
|  |     { | ||||||
|  |         JsonObjectType type; | ||||||
|  |         JsonObjectValue value; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     void writeObjectTo(const JsonObject& obj, StringBuilder& sb) | ||||||
|  |     { | ||||||
|  |         switch (obj.type) | ||||||
|  |         { | ||||||
|  |         case JSON_STRING: | ||||||
|  |             if (obj.value.string) | ||||||
|  |                 sb.append("\"%s\"", obj.value.string); | ||||||
|  |             else | ||||||
|  |                 sb.append("null"); | ||||||
|  |             break; | ||||||
|  |  | ||||||
|  |         case JSON_NUMBER: | ||||||
|  |             sb.append("%lg", obj.value.number); | ||||||
|  |             break; | ||||||
|  |  | ||||||
|  |         case JSON_BOOLEAN: | ||||||
|  |             sb.append(obj.value.boolean ? "true" : "false"); | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user