parent
7b21d94c77
commit
9ed4126e10
@ -1,20 +0,0 @@ |
|||||||
#!/bin/bash -eux |
|
||||||
|
|
||||||
/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_1.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :1 -ac -screen 0 1280x1024x16 |
|
||||||
sleep 3 |
|
||||||
export DISPLAY=:1.0 |
|
||||||
|
|
||||||
mkdir -p /tmp/arduino |
|
||||||
curl -sS http://downloads.arduino.cc/arduino-$VERSION-linux64.tar.xz | tar xJ -C /tmp/arduino --strip 1 || |
|
||||||
curl -sS http://downloads.arduino.cc/arduino-$VERSION-linux64.tgz | tar xz -C /tmp/arduino --strip 1 |
|
||||||
export PATH=$PATH:/tmp/arduino/ |
|
||||||
|
|
||||||
if [[ "$BOARD" =~ "arduino:samd:" ]]; then |
|
||||||
arduino --install-boards arduino:samd |
|
||||||
fi |
|
||||||
|
|
||||||
ln -s $PWD /tmp/arduino/libraries/ArduinoJson |
|
||||||
|
|
||||||
for EXAMPLE in $PWD/examples/*/*.ino; do |
|
||||||
arduino --verify --board $BOARD $EXAMPLE |
|
||||||
done |
|
@ -1,35 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#include <ArduinoJson.h> |
|
||||||
#include <catch.hpp> |
|
||||||
|
|
||||||
using namespace Catch::Matchers; |
|
||||||
|
|
||||||
TEST_CASE("Undefined JsonArray") { |
|
||||||
JsonArray array; |
|
||||||
|
|
||||||
SECTION("SubscriptFails") { |
|
||||||
REQUIRE(array[0].isNull()); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("AddFails") { |
|
||||||
array.add(1); |
|
||||||
REQUIRE(0 == array.size()); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("CreateNestedArrayFails") { |
|
||||||
REQUIRE(array.createNestedArray().isNull()); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("CreateNestedObjectFails") { |
|
||||||
REQUIRE(array.createNestedObject().isNull()); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("PrintToWritesBrackets") { |
|
||||||
char buffer[32]; |
|
||||||
serializeJson(array, buffer, sizeof(buffer)); |
|
||||||
REQUIRE_THAT(buffer, Equals("null")); |
|
||||||
} |
|
||||||
} |
|
@ -1,96 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#include <ArduinoJson.h> |
|
||||||
#include <catch.hpp> |
|
||||||
|
|
||||||
TEST_CASE("JsonVariant undefined") { |
|
||||||
JsonVariant variant; |
|
||||||
|
|
||||||
SECTION("as<T>()") { |
|
||||||
SECTION("long") { |
|
||||||
REQUIRE(variant.as<long>() == 0); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("unsigned") { |
|
||||||
REQUIRE(variant.as<unsigned>() == 0); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("const char*") { |
|
||||||
REQUIRE(variant.as<const char*>() == 0); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("double") { |
|
||||||
REQUIRE(variant.as<double>() == 0); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("bool") { |
|
||||||
REQUIRE(variant.as<bool>() == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("JsonArray") { |
|
||||||
REQUIRE(variant.as<JsonArray>().isNull()); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("JsonObject") { |
|
||||||
REQUIRE(variant.as<JsonObject>().isNull()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("is<T>()") { |
|
||||||
SECTION("long") { |
|
||||||
REQUIRE(variant.is<long>() == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("unsigned") { |
|
||||||
REQUIRE(variant.is<unsigned>() == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("const char*") { |
|
||||||
REQUIRE(variant.is<const char*>() == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("double") { |
|
||||||
REQUIRE(variant.is<double>() == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("bool") { |
|
||||||
REQUIRE(variant.is<bool>() == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("JsonArray") { |
|
||||||
REQUIRE(variant.is<JsonArray>() == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("JsonObject") { |
|
||||||
REQUIRE(variant.is<JsonObject>() == false); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("set<T>()") { |
|
||||||
SECTION("long") { |
|
||||||
REQUIRE(variant.set(42L) == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("unsigned") { |
|
||||||
REQUIRE(variant.set(42U) == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("const char*") { |
|
||||||
REQUIRE(variant.set("42") == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("Serialized<const char*>") { |
|
||||||
REQUIRE(variant.set(serialized("42")) == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("double") { |
|
||||||
REQUIRE(variant.set(42.0) == false); |
|
||||||
} |
|
||||||
|
|
||||||
SECTION("bool") { |
|
||||||
REQUIRE(variant.set(true) == false); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,32 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Namespace.hpp> |
|
||||||
|
|
||||||
#include <stdint.h> // int8_t |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
inline int safe_strcmp(const char* a, const char* b) { |
|
||||||
if (a == b) |
|
||||||
return 0; |
|
||||||
if (!a) |
|
||||||
return -1; |
|
||||||
if (!b) |
|
||||||
return 1; |
|
||||||
return strcmp(a, b); |
|
||||||
} |
|
||||||
|
|
||||||
inline int safe_strncmp(const char* a, const char* b, size_t n) { |
|
||||||
if (a == b) |
|
||||||
return 0; |
|
||||||
if (!a) |
|
||||||
return -1; |
|
||||||
if (!b) |
|
||||||
return 1; |
|
||||||
return strncmp(a, b, n); |
|
||||||
} |
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,28 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include "type_traits.hpp" |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
template <typename T> |
|
||||||
inline void swap(T& a, T& b) { |
|
||||||
T t(a); |
|
||||||
a = b; |
|
||||||
b = t; |
|
||||||
} |
|
||||||
|
|
||||||
#if ARDUINOJSON_HAS_RVALUE_REFERENCES |
|
||||||
template <typename T> |
|
||||||
typename remove_reference<T>::type&& move(T&& t) { |
|
||||||
return static_cast<typename remove_reference<T>::type&&>(t); |
|
||||||
} |
|
||||||
#else |
|
||||||
template <typename T> |
|
||||||
T& move(T& t) { |
|
||||||
return t; |
|
||||||
} |
|
||||||
#endif |
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,51 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <Arduino.h> |
|
||||||
|
|
||||||
#include <ArduinoJson/Polyfills/safe_strcmp.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
#include <ArduinoJson/Strings/StringAdapter.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <> |
|
||||||
class StringAdapter< ::String> { |
|
||||||
public: |
|
||||||
StringAdapter(const ::String& str) : _str(&str) {} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy(p, _str->c_str(), n); |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
// Arduino's String::c_str() can return NULL
|
|
||||||
return !_str->c_str(); |
|
||||||
} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
// Arduino's String::c_str() can return NULL
|
|
||||||
const char* me = _str->c_str(); |
|
||||||
return safe_strcmp(me, other); |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
return _str->length(); |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
const ::String* _str; |
|
||||||
}; |
|
||||||
|
|
||||||
template <> |
|
||||||
class StringAdapter< ::StringSumHelper> : public StringAdapter< ::String> { |
|
||||||
public: |
|
||||||
StringAdapter(const ::String& s) : StringAdapter< ::String>(s) {} |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,51 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <stddef.h> // size_t |
|
||||||
#include <string.h> // strcmp |
|
||||||
|
|
||||||
#include <ArduinoJson/Polyfills/safe_strcmp.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
#include <ArduinoJson/Strings/StringAdapter.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <> |
|
||||||
class StringAdapter<const char*> { |
|
||||||
public: |
|
||||||
StringAdapter(const char* str = 0) : _str(str) {} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
return safe_strcmp(_str, other); |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return !_str; |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
if (!_str) |
|
||||||
return 0; |
|
||||||
return strlen(_str); |
|
||||||
} |
|
||||||
|
|
||||||
const char* data() const { |
|
||||||
return _str; |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_address storage_policy; |
|
||||||
|
|
||||||
protected: |
|
||||||
const char* _str; |
|
||||||
}; |
|
||||||
|
|
||||||
template <int N> |
|
||||||
class StringAdapter<const char[N]> : public StringAdapter<const char*> { |
|
||||||
public: |
|
||||||
StringAdapter(const char* s) : StringAdapter<const char*>(s) {} |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,48 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Polyfills/pgmspace.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
#include <ArduinoJson/Strings/StringAdapter.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <> |
|
||||||
class StringAdapter<const __FlashStringHelper*> { |
|
||||||
public: |
|
||||||
StringAdapter(const __FlashStringHelper* str) : _str(str) {} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
if (!other && !_str) |
|
||||||
return 0; |
|
||||||
if (!_str) |
|
||||||
return -1; |
|
||||||
if (!other) |
|
||||||
return 1; |
|
||||||
return -strcmp_P(other, reinterpret_cast<const char*>(_str)); |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return !_str; |
|
||||||
} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy_P(p, reinterpret_cast<const char*>(_str), n); |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
if (!_str) |
|
||||||
return 0; |
|
||||||
return strlen_P(reinterpret_cast<const char*>(_str)); |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
const __FlashStringHelper* _str; |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,27 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Strings/Adapters/RamStringAdapter.hpp> |
|
||||||
#include <ArduinoJson/Strings/String.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <> |
|
||||||
class StringAdapter<String> : public StringAdapter<char*> { |
|
||||||
public: |
|
||||||
StringAdapter(const String& str) |
|
||||||
: StringAdapter<char*>(str.c_str()), _isStatic(str.isStatic()) {} |
|
||||||
|
|
||||||
bool isStatic() const { |
|
||||||
return _isStatic; |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::decide_at_runtime storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
bool _isStatic; |
|
||||||
}; |
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,29 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Polyfills/type_traits.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
#include <ArduinoJson/Strings/StringAdapter.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <typename TChar> |
|
||||||
class StringAdapter<TChar*, false, |
|
||||||
typename enable_if<sizeof(TChar) == 1 && |
|
||||||
!is_same<TChar, void>::value>::type> |
|
||||||
: public StringAdapter<const char*> { |
|
||||||
public: |
|
||||||
StringAdapter(const TChar* str) |
|
||||||
: StringAdapter<const char*>(reinterpret_cast<const char*>(str)) {} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy(p, _str, n); |
|
||||||
} |
|
||||||
|
|
||||||
typedef ARDUINOJSON_NAMESPACE::storage_policies::store_by_copy storage_policy; |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,48 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Namespace.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
#include <ArduinoJson/Strings/StringAdapter.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <> |
|
||||||
class StringAdapter<const __FlashStringHelper*, true> { |
|
||||||
public: |
|
||||||
StringAdapter(const __FlashStringHelper* str, size_t sz) |
|
||||||
: _str(str), _size(sz) {} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
if (!other && !_str) |
|
||||||
return 0; |
|
||||||
if (!_str) |
|
||||||
return -1; |
|
||||||
if (!other) |
|
||||||
return 1; |
|
||||||
return -strncmp_P(other, reinterpret_cast<const char*>(_str), _size); |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return !_str; |
|
||||||
} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy_P(p, reinterpret_cast<const char*>(_str), n); |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
return _size; |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
const __FlashStringHelper* _str; |
|
||||||
size_t _size; |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,43 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Namespace.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
#include <ArduinoJson/Strings/StringAdapter.hpp> |
|
||||||
|
|
||||||
#include <string.h> // strcmp |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <typename TChar> |
|
||||||
class StringAdapter<TChar*, true> { |
|
||||||
public: |
|
||||||
StringAdapter(const char* str, size_t n) : _str(str), _size(n) {} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
return safe_strncmp(_str, other, _size); |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return !_str; |
|
||||||
} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy(p, _str, n); |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
return _size; |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
const char* _str; |
|
||||||
size_t _size; |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,46 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Namespace.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
#include <ArduinoJson/Strings/StringAdapter.hpp> |
|
||||||
|
|
||||||
#include <string> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <typename TCharTraits, typename TAllocator> |
|
||||||
class StringAdapter<std::basic_string<char, TCharTraits, TAllocator> > { |
|
||||||
public: |
|
||||||
typedef std::basic_string<char, TCharTraits, TAllocator> string_type; |
|
||||||
|
|
||||||
StringAdapter(const string_type& str) : _str(&str) {} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy(p, _str->c_str(), n); |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
if (!other) |
|
||||||
return 1; |
|
||||||
return _str->compare(other); |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
return _str->size(); |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
const string_type* _str; |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,44 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Namespace.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
#include <ArduinoJson/Strings/StringAdapter.hpp> |
|
||||||
|
|
||||||
#include <string_view> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <> |
|
||||||
class StringAdapter<std::string_view> { |
|
||||||
public: |
|
||||||
StringAdapter(std::string_view str) : _str(str) {} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy(p, _str.data(), n); |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
if (!other) |
|
||||||
return 1; |
|
||||||
return _str.compare(other); |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
return _str.size(); |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
std::string_view _str; |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,58 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <Arduino.h> |
|
||||||
|
|
||||||
#include <ArduinoJson/Polyfills/safe_strcmp.hpp> |
|
||||||
#include <ArduinoJson/Strings/IsString.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
class ArduinoStringAdapter { |
|
||||||
public: |
|
||||||
ArduinoStringAdapter(const ::String& str) : _str(&str) {} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy(p, _str->c_str(), n); |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
// Arduino's String::c_str() can return NULL
|
|
||||||
return !_str->c_str(); |
|
||||||
} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
// Arduino's String::c_str() can return NULL
|
|
||||||
const char* me = _str->c_str(); |
|
||||||
return safe_strcmp(me, other); |
|
||||||
} |
|
||||||
|
|
||||||
bool equals(const char* expected) const { |
|
||||||
return compare(expected) == 0; |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
return _str->length(); |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
const ::String* _str; |
|
||||||
}; |
|
||||||
|
|
||||||
template <> |
|
||||||
struct IsString< ::String> : true_type {}; |
|
||||||
|
|
||||||
template <> |
|
||||||
struct IsString< ::StringSumHelper> : true_type {}; |
|
||||||
|
|
||||||
inline ArduinoStringAdapter adaptString(const ::String& str) { |
|
||||||
return ArduinoStringAdapter(str); |
|
||||||
} |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,58 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <stddef.h> // size_t |
|
||||||
#include <string.h> // strcmp |
|
||||||
|
|
||||||
#include <ArduinoJson/Polyfills/safe_strcmp.hpp> |
|
||||||
#include <ArduinoJson/Strings/IsString.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
class ConstRamStringAdapter { |
|
||||||
public: |
|
||||||
ConstRamStringAdapter(const char* str = 0) : _str(str) {} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
return safe_strcmp(_str, other); |
|
||||||
} |
|
||||||
|
|
||||||
bool equals(const char* expected) const { |
|
||||||
return compare(expected) == 0; |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return !_str; |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
if (!_str) |
|
||||||
return 0; |
|
||||||
return strlen(_str); |
|
||||||
} |
|
||||||
|
|
||||||
const char* data() const { |
|
||||||
return _str; |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_address storage_policy; |
|
||||||
|
|
||||||
protected: |
|
||||||
const char* _str; |
|
||||||
}; |
|
||||||
|
|
||||||
template <> |
|
||||||
struct IsString<const char*> : true_type {}; |
|
||||||
|
|
||||||
template <int N> |
|
||||||
struct IsString<const char[N]> : true_type {}; |
|
||||||
|
|
||||||
inline ConstRamStringAdapter adaptString(const char* str) { |
|
||||||
return ConstRamStringAdapter(str); |
|
||||||
} |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,57 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Polyfills/pgmspace.hpp> |
|
||||||
#include <ArduinoJson/Strings/IsString.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
class FlashStringAdapter { |
|
||||||
public: |
|
||||||
FlashStringAdapter(const __FlashStringHelper* str) : _str(str) {} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
if (!other && !_str) |
|
||||||
return 0; |
|
||||||
if (!_str) |
|
||||||
return -1; |
|
||||||
if (!other) |
|
||||||
return 1; |
|
||||||
return -strcmp_P(other, reinterpret_cast<const char*>(_str)); |
|
||||||
} |
|
||||||
|
|
||||||
bool equals(const char* expected) const { |
|
||||||
return compare(expected) == 0; |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return !_str; |
|
||||||
} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy_P(p, reinterpret_cast<const char*>(_str), n); |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
if (!_str) |
|
||||||
return 0; |
|
||||||
return strlen_P(reinterpret_cast<const char*>(_str)); |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
const __FlashStringHelper* _str; |
|
||||||
}; |
|
||||||
|
|
||||||
inline FlashStringAdapter adaptString(const __FlashStringHelper* str) { |
|
||||||
return FlashStringAdapter(str); |
|
||||||
} |
|
||||||
|
|
||||||
template <> |
|
||||||
struct IsString<const __FlashStringHelper*> : true_type {}; |
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,37 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Configuration.hpp> |
|
||||||
#include <ArduinoJson/Polyfills/type_traits.hpp> |
|
||||||
|
|
||||||
#if ARDUINOJSON_ENABLE_ARDUINO_STRING |
|
||||||
# include <Arduino.h> |
|
||||||
#endif |
|
||||||
|
|
||||||
#if ARDUINOJSON_ENABLE_STD_STRING |
|
||||||
# include <string> |
|
||||||
#endif |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <typename> |
|
||||||
struct IsWriteableString : false_type {}; |
|
||||||
|
|
||||||
#if ARDUINOJSON_ENABLE_ARDUINO_STRING |
|
||||||
|
|
||||||
template <> |
|
||||||
struct IsWriteableString< ::String> : true_type {}; |
|
||||||
|
|
||||||
#endif |
|
||||||
|
|
||||||
#if ARDUINOJSON_ENABLE_STD_STRING |
|
||||||
|
|
||||||
template <typename TCharTraits, typename TAllocator> |
|
||||||
struct IsWriteableString<std::basic_string<char, TCharTraits, TAllocator> > |
|
||||||
: true_type {}; |
|
||||||
|
|
||||||
#endif |
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,43 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Strings/ConstRamStringAdapter.hpp> |
|
||||||
#include <ArduinoJson/Strings/IsString.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
class RamStringAdapter : public ConstRamStringAdapter { |
|
||||||
public: |
|
||||||
RamStringAdapter(const char* str) : ConstRamStringAdapter(str) {} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy(p, _str, n); |
|
||||||
} |
|
||||||
|
|
||||||
typedef ARDUINOJSON_NAMESPACE::storage_policies::store_by_copy storage_policy; |
|
||||||
}; |
|
||||||
|
|
||||||
template <typename TChar> |
|
||||||
inline RamStringAdapter adaptString(const TChar* str) { |
|
||||||
return RamStringAdapter(reinterpret_cast<const char*>(str)); |
|
||||||
} |
|
||||||
|
|
||||||
inline RamStringAdapter adaptString(char* str) { |
|
||||||
return RamStringAdapter(str); |
|
||||||
} |
|
||||||
|
|
||||||
template <typename TChar> |
|
||||||
struct IsString<TChar*> { |
|
||||||
static const bool value = sizeof(TChar) == 1; |
|
||||||
}; |
|
||||||
|
|
||||||
template <> |
|
||||||
struct IsString<void*> { |
|
||||||
static const bool value = false; |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,55 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Namespace.hpp> |
|
||||||
#include <ArduinoJson/Strings/IsString.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
class SizedFlashStringAdapter { |
|
||||||
public: |
|
||||||
SizedFlashStringAdapter(const __FlashStringHelper* str, size_t sz) |
|
||||||
: _str(str), _size(sz) {} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
if (!other && !_str) |
|
||||||
return 0; |
|
||||||
if (!_str) |
|
||||||
return -1; |
|
||||||
if (!other) |
|
||||||
return 1; |
|
||||||
return -strncmp_P(other, reinterpret_cast<const char*>(_str), _size); |
|
||||||
} |
|
||||||
|
|
||||||
bool equals(const char* expected) const { |
|
||||||
return compare(expected) == 0; |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return !_str; |
|
||||||
} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy_P(p, reinterpret_cast<const char*>(_str), n); |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
return _size; |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
const __FlashStringHelper* _str; |
|
||||||
size_t _size; |
|
||||||
}; |
|
||||||
|
|
||||||
inline SizedFlashStringAdapter adaptString(const __FlashStringHelper* str, |
|
||||||
size_t sz) { |
|
||||||
return SizedFlashStringAdapter(str, sz); |
|
||||||
} |
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,51 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Namespace.hpp> |
|
||||||
#include <ArduinoJson/Strings/IsString.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
|
|
||||||
#include <string.h> // strcmp |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
class SizedRamStringAdapter { |
|
||||||
public: |
|
||||||
SizedRamStringAdapter(const char* str, size_t n) : _str(str), _size(n) {} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
return safe_strncmp(_str, other, _size); |
|
||||||
} |
|
||||||
|
|
||||||
bool equals(const char* expected) const { |
|
||||||
return compare(expected) == 0; |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return !_str; |
|
||||||
} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy(p, _str, n); |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
return _size; |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
const char* _str; |
|
||||||
size_t _size; |
|
||||||
}; |
|
||||||
|
|
||||||
template <typename TChar> |
|
||||||
inline SizedRamStringAdapter adaptString(const TChar* str, size_t size) { |
|
||||||
return SizedRamStringAdapter(reinterpret_cast<const char*>(str), size); |
|
||||||
} |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,61 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Namespace.hpp> |
|
||||||
#include <ArduinoJson/Strings/IsString.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
|
|
||||||
#include <string> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <typename TString> |
|
||||||
class StdStringAdapter { |
|
||||||
public: |
|
||||||
StdStringAdapter(const TString& str) : _str(&str) {} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy(p, _str->c_str(), n); |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
if (!other) |
|
||||||
return 1; |
|
||||||
return _str->compare(other); |
|
||||||
} |
|
||||||
|
|
||||||
bool equals(const char* expected) const { |
|
||||||
if (!expected) |
|
||||||
return false; |
|
||||||
return *_str == expected; |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
return _str->size(); |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
const TString* _str; |
|
||||||
}; |
|
||||||
|
|
||||||
template <typename TCharTraits, typename TAllocator> |
|
||||||
struct IsString<std::basic_string<char, TCharTraits, TAllocator> > : true_type { |
|
||||||
}; |
|
||||||
|
|
||||||
template <typename TCharTraits, typename TAllocator> |
|
||||||
inline StdStringAdapter<std::basic_string<char, TCharTraits, TAllocator> > |
|
||||||
adaptString(const std::basic_string<char, TCharTraits, TAllocator>& str) { |
|
||||||
return StdStringAdapter<std::basic_string<char, TCharTraits, TAllocator> >( |
|
||||||
str); |
|
||||||
} |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,32 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Polyfills/type_traits.hpp> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
template <typename T, bool bounded = false, typename Enable = void> |
|
||||||
class StringAdapter; |
|
||||||
|
|
||||||
template <typename T> |
|
||||||
inline StringAdapter<T, false> adaptString(const T& str) { |
|
||||||
return StringAdapter<T, false>(str); |
|
||||||
} |
|
||||||
|
|
||||||
template <typename T> |
|
||||||
inline StringAdapter<T, true> adaptString(const T& str, size_t sz) { |
|
||||||
return StringAdapter<T, true>(str, sz); |
|
||||||
} |
|
||||||
|
|
||||||
template <typename T, typename Enable = void> |
|
||||||
struct IsString : false_type {}; |
|
||||||
|
|
||||||
template <typename T> |
|
||||||
struct IsString< |
|
||||||
T, typename make_void<typename StringAdapter<T>::storage_policy>::type> |
|
||||||
: true_type {}; |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
@ -1,56 +0,0 @@ |
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright Benoit Blanchon 2014-2021
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#pragma once |
|
||||||
|
|
||||||
#include <ArduinoJson/Namespace.hpp> |
|
||||||
#include <ArduinoJson/Strings/IsString.hpp> |
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp> |
|
||||||
|
|
||||||
#include <string_view> |
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE { |
|
||||||
|
|
||||||
class StringViewAdapter { |
|
||||||
public: |
|
||||||
StringViewAdapter(std::string_view str) : _str(str) {} |
|
||||||
|
|
||||||
void copyTo(char* p, size_t n) const { |
|
||||||
memcpy(p, _str.data(), n); |
|
||||||
} |
|
||||||
|
|
||||||
bool isNull() const { |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
int compare(const char* other) const { |
|
||||||
if (!other) |
|
||||||
return 1; |
|
||||||
return _str.compare(other); |
|
||||||
} |
|
||||||
|
|
||||||
bool equals(const char* expected) const { |
|
||||||
if (!expected) |
|
||||||
return false; |
|
||||||
return _str == expected; |
|
||||||
} |
|
||||||
|
|
||||||
size_t size() const { |
|
||||||
return _str.size(); |
|
||||||
} |
|
||||||
|
|
||||||
typedef storage_policies::store_by_copy storage_policy; |
|
||||||
|
|
||||||
private: |
|
||||||
std::string_view _str; |
|
||||||
}; |
|
||||||
|
|
||||||
template <> |
|
||||||
struct IsString<std::string_view> : true_type {}; |
|
||||||
|
|
||||||
inline StringViewAdapter adaptString(const std::string_view& str) { |
|
||||||
return StringViewAdapter(str); |
|
||||||
} |
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
|
Loading…
Reference in new issue