mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Extracted class StringBuilder
This commit is contained in:
		| @@ -3,6 +3,4 @@ | ||||
| * Benoit Blanchon 2014 - MIT License | ||||
| */ | ||||
|  | ||||
| #include <string.h> | ||||
|  | ||||
| #include "JsonArray.h" | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include "StringBuilder.h" | ||||
|  | ||||
| enum JsonObjectType | ||||
| { | ||||
| @@ -67,14 +67,22 @@ public: | ||||
|  | ||||
|     void writeTo(char* buffer, size_t bufferSize) | ||||
|     { | ||||
|         buffer[0] = 0; | ||||
|         StringBuilder sb(buffer, bufferSize); | ||||
|         writeTo(sb); | ||||
|     } | ||||
|  | ||||
|         append(buffer, bufferSize, "["); | ||||
| private: | ||||
|     JsonObject items[N]; | ||||
|     int itemCount; | ||||
|  | ||||
|     void writeTo(StringBuilder& sb) | ||||
|     { | ||||
|         sb.append("["); | ||||
|  | ||||
|         for (int i = 0; i < itemCount; i++) | ||||
|         { | ||||
|             if (i>0) | ||||
|                 append(buffer, bufferSize, ","); | ||||
|                 sb.append(","); | ||||
|  | ||||
|             JsonObjectValue value = items[i].value; | ||||
|  | ||||
| @@ -82,36 +90,22 @@ public: | ||||
|             { | ||||
|             case JSON_STRING: | ||||
|                 if (value.string) | ||||
|                     append(buffer, bufferSize, "\"%s\"", value.string); | ||||
|                     sb.append("\"%s\"", value.string); | ||||
|                 else | ||||
|                     append(buffer, bufferSize, "null"); | ||||
|                     sb.append("null"); | ||||
|                 break; | ||||
|  | ||||
|             case JSON_NUMBER: | ||||
|                 append(buffer, bufferSize, "%lg", value.number); | ||||
|                 sb.append("%lg", value.number); | ||||
|                 break; | ||||
|  | ||||
|             case JSON_BOOLEAN: | ||||
|                 append(buffer, bufferSize, value.boolean ? "true" : "false"); | ||||
|                 sb.append(value.boolean ? "true" : "false"); | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         append(buffer, bufferSize, "]"); | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     JsonObject items[N]; | ||||
|     int itemCount; | ||||
|  | ||||
|     void append(char* dest, size_t destSize, const char* format, ...) | ||||
|     { | ||||
|         int len = strlen(dest); | ||||
|  | ||||
|         va_list args; | ||||
|         va_start(args, format); | ||||
|         vsnprintf(dest + len, destSize - len, format, args); | ||||
|         va_end(args); | ||||
|         sb.append("]"); | ||||
|     } | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -84,9 +84,11 @@ | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="JsonArray.cpp" /> | ||||
|     <ClCompile Include="JsonArrayTests.cpp" /> | ||||
|     <ClCompile Include="StringBuilder.cpp" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="JsonArray.h" /> | ||||
|     <ClInclude Include="StringBuilder.h" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||
|   <ImportGroup Label="ExtensionTargets"> | ||||
|   | ||||
| @@ -21,10 +21,16 @@ | ||||
|     <ClCompile Include="JsonArray.cpp"> | ||||
|       <Filter>Source Files</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="StringBuilder.cpp"> | ||||
|       <Filter>Source Files</Filter> | ||||
|     </ClCompile> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="JsonArray.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="StringBuilder.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|   </ItemGroup> | ||||
| </Project> | ||||
							
								
								
									
										14
									
								
								JsonGeneratorTests/StringBuilder.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								JsonGeneratorTests/StringBuilder.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| #include "StringBuilder.h" | ||||
|  | ||||
|  | ||||
| void StringBuilder::append(const char* format, ...) | ||||
| { | ||||
|     char* tail = buffer + length; | ||||
|  | ||||
|     va_list args; | ||||
|     va_start(args, format); | ||||
|     vsnprintf(tail, capacity - length, format, args); | ||||
|     va_end(args); | ||||
|  | ||||
|     length += strlen(tail); | ||||
| } | ||||
							
								
								
									
										27
									
								
								JsonGeneratorTests/StringBuilder.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								JsonGeneratorTests/StringBuilder.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| /* | ||||
|  * Arduino JSON library | ||||
|  * Benoit Blanchon 2014 - MIT License | ||||
|  */ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <cstdarg> | ||||
| #include <cstdio> | ||||
| #include <cstring> | ||||
|  | ||||
| class StringBuilder | ||||
| { | ||||
| public: | ||||
|     StringBuilder(char* buf, size_t size) | ||||
|         : buffer(buf), capacity(size), length(0) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     void append(const char* format, ...); | ||||
|  | ||||
| private: | ||||
|     char* buffer; | ||||
|     int capacity; | ||||
|     int length; | ||||
| }; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user