Added latest ArduinoJSON library to third-Party software.pull/54/head
parent
1e53e14416
commit
f458bbb8c1
@ -0,0 +1,14 @@ |
|||||||
|
// ArduinoJson - https://arduinojson.org
|
||||||
|
// Copyright Benoit Blanchon 2014-2021
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
#pragma once |
||||||
|
|
||||||
|
namespace ARDUINOJSON_NAMESPACE { |
||||||
|
|
||||||
|
template <class = void> |
||||||
|
struct make_void { |
||||||
|
typedef void type; |
||||||
|
}; |
||||||
|
|
||||||
|
} // namespace ARDUINOJSON_NAMESPACE
|
@ -0,0 +1,52 @@ |
|||||||
|
// 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< ::StringSumHelper>(const ::String& s) |
||||||
|
: StringAdapter< ::String>(s) {} |
||||||
|
}; |
||||||
|
|
||||||
|
} // namespace ARDUINOJSON_NAMESPACE
|
@ -0,0 +1,51 @@ |
|||||||
|
// 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[N]>(const char* s) : StringAdapter<const char*>(s) {} |
||||||
|
}; |
||||||
|
|
||||||
|
} // namespace ARDUINOJSON_NAMESPACE
|
@ -0,0 +1,48 @@ |
|||||||
|
// 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
|
@ -0,0 +1,27 @@ |
|||||||
|
// 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
|
@ -0,0 +1,29 @@ |
|||||||
|
// 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
|
@ -0,0 +1,48 @@ |
|||||||
|
// 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
|
@ -0,0 +1,43 @@ |
|||||||
|
// 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
|
@ -0,0 +1,46 @@ |
|||||||
|
// 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
|
@ -0,0 +1,44 @@ |
|||||||
|
// 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
|
@ -0,0 +1,32 @@ |
|||||||
|
// 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
|
Loading…
Reference in new issue