summaryrefslogtreecommitdiff
path: root/include/lib/ArduinoJson/JsonBuffer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/lib/ArduinoJson/JsonBuffer.hpp')
-rw-r--r--include/lib/ArduinoJson/JsonBuffer.hpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/include/lib/ArduinoJson/JsonBuffer.hpp b/include/lib/ArduinoJson/JsonBuffer.hpp
new file mode 100644
index 0000000..26101e0
--- /dev/null
+++ b/include/lib/ArduinoJson/JsonBuffer.hpp
@@ -0,0 +1,78 @@
+// ArduinoJson - arduinojson.org
+// Copyright Benoit Blanchon 2014-2018
+// MIT License
+
+#pragma once
+
+#include <stddef.h> // for size_t
+#include <stdint.h> // for uint8_t
+#include <string.h>
+
+#include "Data/NonCopyable.hpp"
+#include "JsonVariant.hpp"
+#include "TypeTraits/EnableIf.hpp"
+#include "TypeTraits/IsArray.hpp"
+
+namespace ArduinoJson {
+class JsonArray;
+class JsonObject;
+
+// Entry point for using the library.
+//
+// Handle the memory management (done in derived classes) and calls the parser.
+// This abstract class is implemented by StaticJsonBuffer which implements a
+// fixed memory allocation.
+class JsonBuffer : Internals::NonCopyable {
+ public:
+ // Allocates an empty JsonArray.
+ //
+ // Returns a reference to the new JsonArray or JsonArray::invalid() if the
+ // allocation fails.
+ JsonArray &createArray();
+
+ // Allocates an empty JsonObject.
+ //
+ // Returns a reference to the new JsonObject or JsonObject::invalid() if the
+ // allocation fails.
+ JsonObject &createObject();
+
+ // Duplicates a string
+ //
+ // const char* strdup(TValue);
+ // TValue = const std::string&, const String&,
+ template <typename TString>
+ DEPRECATED("char* are duplicated, you don't need strdup() anymore")
+ typename Internals::EnableIf<!Internals::IsArray<TString>::value,
+ const char *>::type strdup(const TString &src) {
+ return Internals::StringTraits<TString>::duplicate(src, this);
+ }
+ //
+ // const char* strdup(TValue);
+ // TValue = char*, const char*, const FlashStringHelper*
+ template <typename TString>
+ DEPRECATED("char* are duplicated, you don't need strdup() anymore")
+ const char *strdup(TString *src) {
+ return Internals::StringTraits<TString *>::duplicate(src, this);
+ }
+
+ // Allocates n bytes in the JsonBuffer.
+ // Return a pointer to the allocated memory or NULL if allocation fails.
+ virtual void *alloc(size_t size) = 0;
+
+ protected:
+ // CAUTION: NO VIRTUAL DESTRUCTOR!
+ // If we add a virtual constructor the Arduino compiler will add malloc()
+ // and free() to the binary, adding 706 useless bytes.
+ ~JsonBuffer() {}
+
+ // Preserve aligment if necessary
+ static FORCE_INLINE size_t round_size_up(size_t bytes) {
+#if ARDUINOJSON_ENABLE_ALIGNMENT
+ const size_t x = sizeof(void *) - 1;
+ return (bytes + x) & ~x;
+#else
+ return bytes;
+#endif
+ }
+};
+}