diff options
author | Daniel Friesel <derf@finalrewind.org> | 2018-09-17 10:02:07 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2018-09-17 10:02:07 +0200 |
commit | 4f6253aa9fec99260b8bb7b9b2e9003f5259b600 (patch) | |
tree | 2d0a3fdd10e258ecce5fb220547b1c43b870d6d2 /include/lib/ArduinoJson/StringTraits/StdString.hpp | |
parent | 30c4f72770568749b4230a6b598e3fb87a065e91 (diff) |
Import arduinojson and ubjson. Only partially working at the moment
Diffstat (limited to 'include/lib/ArduinoJson/StringTraits/StdString.hpp')
-rw-r--r-- | include/lib/ArduinoJson/StringTraits/StdString.hpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/include/lib/ArduinoJson/StringTraits/StdString.hpp b/include/lib/ArduinoJson/StringTraits/StdString.hpp new file mode 100644 index 0000000..35f4461 --- /dev/null +++ b/include/lib/ArduinoJson/StringTraits/StdString.hpp @@ -0,0 +1,77 @@ +// ArduinoJson - arduinojson.org +// Copyright Benoit Blanchon 2014-2018 +// MIT License + +#pragma once + +#if ARDUINOJSON_ENABLE_STD_STRING || ARDUINOJSON_ENABLE_ARDUINO_STRING + +#if ARDUINOJSON_ENABLE_ARDUINO_STRING +#include <WString.h> +#endif + +#if ARDUINOJSON_ENABLE_STD_STRING +#include <string> +#endif + +namespace ArduinoJson { +namespace Internals { + +template <typename TString> +struct StdStringTraits { + typedef const char* duplicate_t; + + template <typename Buffer> + static duplicate_t duplicate(const TString& str, Buffer* buffer) { + if (!str.c_str()) return NULL; // <- Arduino string can return NULL + size_t size = str.length() + 1; + void* dup = buffer->alloc(size); + if (dup != NULL) memcpy(dup, str.c_str(), size); + return static_cast<duplicate_t>(dup); + } + + static bool is_null(const TString& str) { + // Arduino's String::c_str() can return NULL + return !str.c_str(); + } + + struct Reader : CharPointerTraits<char>::Reader { + Reader(const TString& str) : CharPointerTraits<char>::Reader(str.c_str()) {} + }; + + static bool equals(const TString& str, const char* expected) { + // Arduino's String::c_str() can return NULL + const char* actual = str.c_str(); + if (!actual || !expected) return actual == expected; + return 0 == strcmp(actual, expected); + } + + static void append(TString& str, char c) { + str += c; + } + + static void append(TString& str, const char* s) { + str += s; + } + + static const bool has_append = true; + static const bool has_equals = true; + static const bool should_duplicate = true; +}; + +#if ARDUINOJSON_ENABLE_ARDUINO_STRING +template <> +struct StringTraits<String, void> : StdStringTraits<String> {}; +template <> +struct StringTraits<StringSumHelper, void> : StdStringTraits<StringSumHelper> { +}; +#endif + +#if ARDUINOJSON_ENABLE_STD_STRING +template <> +struct StringTraits<std::string, void> : StdStringTraits<std::string> {}; +#endif +} // namespace Internals +} // namespace ArduinoJson + +#endif |