diff --git a/extras/tests/MemoryPool/StringCopier.cpp b/extras/tests/MemoryPool/StringCopier.cpp index 670c5778..ba39cfd9 100644 --- a/extras/tests/MemoryPool/StringCopier.cpp +++ b/extras/tests/MemoryPool/StringCopier.cpp @@ -18,7 +18,7 @@ TEST_CASE("StringCopier") { str.append("hello"); REQUIRE(str.isValid() == true); - REQUIRE(std::string(str.str()) == "hello"); + REQUIRE(str.str() == "hello"); REQUIRE(pool.overflowed() == false); } diff --git a/src/ArduinoJson/Json/JsonDeserializer.hpp b/src/ArduinoJson/Json/JsonDeserializer.hpp index c37cde63..3d517175 100644 --- a/src/ArduinoJson/Json/JsonDeserializer.hpp +++ b/src/ArduinoJson/Json/JsonDeserializer.hpp @@ -231,7 +231,7 @@ class JsonDeserializer { return false; } - typename TStringStorage::string_type key = _stringStorage.str(); + String key = _stringStorage.str(); TFilter memberFilter = filter[key.c_str()]; diff --git a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp index 40a07bcc..555b762f 100644 --- a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp @@ -417,7 +417,7 @@ class MsgPackDeserializer { if (!readKey()) return false; - typename TStringStorage::string_type key = _stringStorage.str(); + String key = _stringStorage.str(); TFilter memberFilter = filter[key.c_str()]; VariantData *member; diff --git a/src/ArduinoJson/StringStorage/StringCopier.hpp b/src/ArduinoJson/StringStorage/StringCopier.hpp index 4af6c053..455a155a 100644 --- a/src/ArduinoJson/StringStorage/StringCopier.hpp +++ b/src/ArduinoJson/StringStorage/StringCopier.hpp @@ -10,8 +10,6 @@ namespace ARDUINOJSON_NAMESPACE { class StringCopier { public: - typedef CopiedString string_type; - StringCopier(MemoryPool& pool) : _pool(&pool) {} void startString() { @@ -21,10 +19,10 @@ class StringCopier { _pool->markAsOverflowed(); } - string_type save() { + String save() { ARDUINOJSON_ASSERT(_ptr); ARDUINOJSON_ASSERT(_size < _capacity); // needs room for the terminator - return string_type(_pool->saveStringFromFreeZone(_size), _size); + return String(_pool->saveStringFromFreeZone(_size), _size, false); } void append(const char* s) { @@ -50,11 +48,11 @@ class StringCopier { return _size; } - string_type str() const { + String str() const { ARDUINOJSON_ASSERT(_ptr); ARDUINOJSON_ASSERT(_size < _capacity); _ptr[_size] = 0; - return string_type(_ptr, _size); + return String(_ptr, _size, false); } private: diff --git a/src/ArduinoJson/StringStorage/StringMover.hpp b/src/ArduinoJson/StringStorage/StringMover.hpp index 43f9c49e..e862ff07 100644 --- a/src/ArduinoJson/StringStorage/StringMover.hpp +++ b/src/ArduinoJson/StringStorage/StringMover.hpp @@ -5,23 +5,21 @@ #pragma once #include -#include +#include namespace ARDUINOJSON_NAMESPACE { class StringMover { public: - typedef LinkedString string_type; - StringMover(char* ptr) : _writePtr(ptr) {} void startString() { _startPtr = _writePtr; } - FORCE_INLINE string_type save() { + FORCE_INLINE String save() { _writePtr[0] = 0; // terminator - string_type s = str(); + String s = str(); _writePtr++; return s; } @@ -34,8 +32,8 @@ class StringMover { return true; } - string_type str() const { - return string_type(_startPtr, size()); + String str() const { + return String(_startPtr, size(), true); } size_t size() const { diff --git a/src/ArduinoJson/Strings/StoragePolicy.hpp b/src/ArduinoJson/Strings/StoragePolicy.hpp index a96051f1..2a01f0d5 100644 --- a/src/ArduinoJson/Strings/StoragePolicy.hpp +++ b/src/ArduinoJson/Strings/StoragePolicy.hpp @@ -5,7 +5,6 @@ #pragma once #include -#include #include namespace ARDUINOJSON_NAMESPACE { @@ -13,15 +12,13 @@ namespace ARDUINOJSON_NAMESPACE { struct LinkStringStoragePolicy { template bool store(TAdaptedString str, MemoryPool *, TCallback callback) { - LinkedString storedString(str.data(), str.size()); + String storedString(str.data(), str.size(), true); callback(storedString); return !str.isNull(); } }; struct CopyStringStoragePolicy { - typedef CopiedString TResult; - template bool store(TAdaptedString str, MemoryPool *pool, TCallback callback); }; diff --git a/src/ArduinoJson/Strings/StoredString.hpp b/src/ArduinoJson/Strings/StoredString.hpp deleted file mode 100644 index 53e87468..00000000 --- a/src/ArduinoJson/Strings/StoredString.hpp +++ /dev/null @@ -1,35 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2022, Benoit BLANCHON -// MIT License - -#pragma once - -namespace ARDUINOJSON_NAMESPACE { - -template -class StoredString { - public: - StoredString() : _data(0), _size(0) {} - StoredString(const char* p, size_t n) : _data(p), _size(n) {} - - operator const char*() const { - return _data; - } - - const char* c_str() const { - return _data; - } - - size_t size() const { - return _size; - } - - private: - const char* _data; - size_t _size; -}; - -typedef StoredString LinkedString; -typedef StoredString CopiedString; - -} // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Variant/ConverterImpl.hpp b/src/ArduinoJson/Variant/ConverterImpl.hpp index 1fc3ae18..a825760c 100644 --- a/src/ArduinoJson/Variant/ConverterImpl.hpp +++ b/src/ArduinoJson/Variant/ConverterImpl.hpp @@ -206,9 +206,9 @@ class MemoryPoolPrint : public Print { pool->getFreeZone(&_string, &_capacity); } - CopiedString str() { + String str() { ARDUINOJSON_ASSERT(_size < _capacity); - return CopiedString(_pool->saveStringFromFreeZone(_size), _size); + return String(_pool->saveStringFromFreeZone(_size), _size, false); } size_t write(uint8_t c) { diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 11c315a5..6f807632 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -208,16 +208,12 @@ class VariantData { setType(VALUE_IS_NULL); } - void setString(CopiedString s) { + void setString(String s) { ARDUINOJSON_ASSERT(s); - setType(VALUE_IS_OWNED_STRING); - _content.asString.data = s.c_str(); - _content.asString.size = s.size(); - } - - void setString(LinkedString s) { - ARDUINOJSON_ASSERT(s); - setType(VALUE_IS_LINKED_STRING); + if (s.isStatic()) + setType(VALUE_IS_LINKED_STRING); + else + setType(VALUE_IS_OWNED_STRING); _content.asString.data = s.c_str(); _content.asString.size = s.size(); } diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 1be86390..bd3ce07b 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -174,7 +174,7 @@ template bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool, TCallback callback) { const char *copy = pool->saveString(str); - CopiedString storedString(copy, str.size()); + String storedString(copy, str.size(), false); callback(storedString); return copy != 0; } diff --git a/src/ArduinoJson/Variant/VariantSlot.hpp b/src/ArduinoJson/Variant/VariantSlot.hpp index 4cc55fd1..8f4169cc 100644 --- a/src/ArduinoJson/Variant/VariantSlot.hpp +++ b/src/ArduinoJson/Variant/VariantSlot.hpp @@ -7,7 +7,6 @@ #include #include #include -#include #include namespace ARDUINOJSON_NAMESPACE { @@ -77,15 +76,12 @@ class VariantSlot { _next = VariantSlotDiff(slot - this); } - void setKey(CopiedString k) { + void setKey(String k) { ARDUINOJSON_ASSERT(k); - _flags |= OWNED_KEY_BIT; - _key = k.c_str(); - } - - void setKey(LinkedString k) { - ARDUINOJSON_ASSERT(k); - _flags &= VALUE_MASK; + if (k.isStatic()) + _flags &= VALUE_MASK; + else + _flags |= OWNED_KEY_BIT; _key = k.c_str(); }