Просмотр исходного кода

Replace `CopiedString` and `LinkedString` with `JsonString`

Benoit Blanchon 4 лет назад
Родитель
Сommit
4f6244eef4

+ 1 - 1
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);
   }
 

+ 1 - 1
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()];
 

+ 1 - 1
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;
 

+ 4 - 6
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:

+ 5 - 7
src/ArduinoJson/StringStorage/StringMover.hpp

@@ -5,23 +5,21 @@
 #pragma once
 
 #include <ArduinoJson/Namespace.hpp>
-#include <ArduinoJson/Strings/StoredString.hpp>
+#include <ArduinoJson/Strings/String.hpp>
 
 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 {

+ 1 - 4
src/ArduinoJson/Strings/StoragePolicy.hpp

@@ -5,7 +5,6 @@
 #pragma once
 
 #include <ArduinoJson/Memory/MemoryPool.hpp>
-#include <ArduinoJson/Strings/StoredString.hpp>
 #include <ArduinoJson/Strings/String.hpp>
 
 namespace ARDUINOJSON_NAMESPACE {
@@ -13,15 +12,13 @@ namespace ARDUINOJSON_NAMESPACE {
 struct LinkStringStoragePolicy {
   template <typename TAdaptedString, typename TCallback>
   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 <typename TAdaptedString, typename TCallback>
   bool store(TAdaptedString str, MemoryPool *pool, TCallback callback);
 };

+ 0 - 35
src/ArduinoJson/Strings/StoredString.hpp

@@ -1,35 +0,0 @@
-// ArduinoJson - https://arduinojson.org
-// Copyright © 2014-2022, Benoit BLANCHON
-// MIT License
-
-#pragma once
-
-namespace ARDUINOJSON_NAMESPACE {
-
-template <bool linked>
-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<true> LinkedString;
-typedef StoredString<false> CopiedString;
-
-}  // namespace ARDUINOJSON_NAMESPACE

+ 2 - 2
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) {

+ 5 - 9
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();
   }

+ 1 - 1
src/ArduinoJson/Variant/VariantImpl.hpp

@@ -174,7 +174,7 @@ template <typename TAdaptedString, typename TCallback>
 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;
 }

+ 5 - 9
src/ArduinoJson/Variant/VariantSlot.hpp

@@ -7,7 +7,6 @@
 #include <ArduinoJson/Polyfills/integer.hpp>
 #include <ArduinoJson/Polyfills/limits.hpp>
 #include <ArduinoJson/Polyfills/type_traits.hpp>
-#include <ArduinoJson/Strings/StoredString.hpp>
 #include <ArduinoJson/Variant/VariantContent.hpp>
 
 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();
   }