From 5c0338970c83ae0e882ca2853004f3c90950f62f Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 2 May 2023 17:52:53 +0200 Subject: [PATCH] Remove `StoragePolicy` --- .../Collection/CollectionFunctions.hpp | 12 ++++++--- src/ArduinoJson/Collection/CollectionImpl.hpp | 1 - src/ArduinoJson/Document/JsonDocument.hpp | 1 - src/ArduinoJson/Memory/MemoryPool.hpp | 26 ------------------- .../Strings/Adapters/FlashString.hpp | 8 ++++-- .../Strings/Adapters/JsonString.hpp | 5 ++-- .../Strings/Adapters/RamString.hpp | 13 +++++----- src/ArduinoJson/Strings/StoragePolicy.hpp | 18 ------------- src/ArduinoJson/Variant/VariantFunctions.hpp | 26 +++++++++++++------ 9 files changed, 40 insertions(+), 70 deletions(-) delete mode 100644 src/ArduinoJson/Strings/StoragePolicy.hpp diff --git a/src/ArduinoJson/Collection/CollectionFunctions.hpp b/src/ArduinoJson/Collection/CollectionFunctions.hpp index 557ada05..441fe27e 100644 --- a/src/ArduinoJson/Collection/CollectionFunctions.hpp +++ b/src/ArduinoJson/Collection/CollectionFunctions.hpp @@ -27,10 +27,14 @@ inline VariantData* collectionAddMember(CollectionData* obj, TAdaptedString key, auto slot = pool->allocVariant(); if (!slot) return nullptr; - auto storedKey = storeString(pool, key); - if (!storedKey) - return nullptr; - slot->setKey(storedKey); + if (key.isLinked()) + slot->setKey(JsonString(key.data(), key.size(), JsonString::Linked)); + else { + auto storedKey = pool->saveString(key); + if (!storedKey) + return nullptr; + slot->setKey(JsonString(storedKey, key.size(), JsonString::Copied)); + } obj->add(slot); return slot->data(); } diff --git a/src/ArduinoJson/Collection/CollectionImpl.hpp b/src/ArduinoJson/Collection/CollectionImpl.hpp index d9757744..4011c56a 100644 --- a/src/ArduinoJson/Collection/CollectionImpl.hpp +++ b/src/ArduinoJson/Collection/CollectionImpl.hpp @@ -5,7 +5,6 @@ #pragma once #include -#include #include #include diff --git a/src/ArduinoJson/Document/JsonDocument.hpp b/src/ArduinoJson/Document/JsonDocument.hpp index 4957fb42..e5d5b9af 100644 --- a/src/ArduinoJson/Document/JsonDocument.hpp +++ b/src/ArduinoJson/Document/JsonDocument.hpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include diff --git a/src/ArduinoJson/Memory/MemoryPool.hpp b/src/ArduinoJson/Memory/MemoryPool.hpp index af90addf..0b0775a8 100644 --- a/src/ArduinoJson/Memory/MemoryPool.hpp +++ b/src/ArduinoJson/Memory/MemoryPool.hpp @@ -296,30 +296,4 @@ class MemoryPool { StringNode* strings_ = nullptr; }; -template -JsonString storeString(MemoryPool* pool, TAdaptedString str, - StringStoragePolicy::Copy) { - return JsonString(pool->saveString(str), str.size(), JsonString::Copied); -} - -template -JsonString storeString(MemoryPool*, TAdaptedString str, - StringStoragePolicy::Link) { - return JsonString(str.data(), str.size(), JsonString::Linked); -} - -template -JsonString storeString(MemoryPool* pool, TAdaptedString str, - StringStoragePolicy::LinkOrCopy policy) { - if (policy.link) - return storeString(pool, str, StringStoragePolicy::Link()); - else - return storeString(pool, str, StringStoragePolicy::Copy()); -} - -template -JsonString storeString(MemoryPool* pool, TAdaptedString str) { - return storeString(pool, str, str.storagePolicy()); -} - ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Strings/Adapters/FlashString.hpp b/src/ArduinoJson/Strings/Adapters/FlashString.hpp index 4989315a..d6f148f4 100644 --- a/src/ArduinoJson/Strings/Adapters/FlashString.hpp +++ b/src/ArduinoJson/Strings/Adapters/FlashString.hpp @@ -26,6 +26,10 @@ class FlashString { return static_cast(pgm_read_byte(str_ + i)); } + const char* data() const { + return nullptr; + } + size_t size() const { return size_; } @@ -59,8 +63,8 @@ class FlashString { ::memcpy_P(p, s.str_, n); } - StringStoragePolicy::Copy storagePolicy() const { - return StringStoragePolicy::Copy(); + bool isLinked() const { + return false; } private: diff --git a/src/ArduinoJson/Strings/Adapters/JsonString.hpp b/src/ArduinoJson/Strings/Adapters/JsonString.hpp index 5db7c208..da383716 100644 --- a/src/ArduinoJson/Strings/Adapters/JsonString.hpp +++ b/src/ArduinoJson/Strings/Adapters/JsonString.hpp @@ -15,9 +15,8 @@ class JsonStringAdapter : public SizedRamString { JsonStringAdapter(const JsonString& s) : SizedRamString(s.c_str(), s.size()), linked_(s.isLinked()) {} - StringStoragePolicy::LinkOrCopy storagePolicy() const { - StringStoragePolicy::LinkOrCopy policy = {linked_}; - return policy; + bool isLinked() const { + return linked_; } private: diff --git a/src/ArduinoJson/Strings/Adapters/RamString.hpp b/src/ArduinoJson/Strings/Adapters/RamString.hpp index 12c67c94..32eb533d 100644 --- a/src/ArduinoJson/Strings/Adapters/RamString.hpp +++ b/src/ArduinoJson/Strings/Adapters/RamString.hpp @@ -8,7 +8,6 @@ #include // strcmp #include -#include #include ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE @@ -53,8 +52,8 @@ class ZeroTerminatedRamString { return stringCompare(a, b) == 0; } - StringStoragePolicy::Copy storagePolicy() const { - return StringStoragePolicy::Copy(); + bool isLinked() const { + return false; } protected: @@ -83,8 +82,8 @@ class StaticStringAdapter : public ZeroTerminatedRamString { public: StaticStringAdapter(const char* str) : ZeroTerminatedRamString(str) {} - StringStoragePolicy::Link storagePolicy() const { - return StringStoragePolicy::Link(); + bool isLinked() const { + return true; } }; @@ -121,8 +120,8 @@ class SizedRamString { return str_; } - StringStoragePolicy::Copy storagePolicy() const { - return StringStoragePolicy::Copy(); + bool isLinked() const { + return false; } protected: diff --git a/src/ArduinoJson/Strings/StoragePolicy.hpp b/src/ArduinoJson/Strings/StoragePolicy.hpp deleted file mode 100644 index b8b3b6a6..00000000 --- a/src/ArduinoJson/Strings/StoragePolicy.hpp +++ /dev/null @@ -1,18 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2023, Benoit BLANCHON -// MIT License - -#pragma once - -ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE - -namespace StringStoragePolicy { - -struct Link {}; -struct Copy {}; -struct LinkOrCopy { - bool link; -}; -} // namespace StringStoragePolicy - -ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Variant/VariantFunctions.hpp b/src/ArduinoJson/Variant/VariantFunctions.hpp index d3850780..dd2fe776 100644 --- a/src/ArduinoJson/Variant/VariantFunctions.hpp +++ b/src/ArduinoJson/Variant/VariantFunctions.hpp @@ -6,7 +6,6 @@ #include #include -#include #include #include @@ -59,18 +58,18 @@ inline bool variantCopyFrom(VariantData* dst, const VariantData* src, return collectionCopy(&dst->toObject(), src->asObject(), pool); case VALUE_IS_OWNED_STRING: { auto str = adaptString(src->asString()); - auto dup = storeString(pool, str, StringStoragePolicy::Copy()); + auto dup = pool->saveString(str); if (!dup) return false; - dst->setString(dup); + dst->setString(JsonString(dup, str.size(), JsonString::Copied)); return true; } case VALUE_IS_RAW_STRING: { auto str = adaptString(src->asRawString()); - auto dup = storeString(pool, str, StringStoragePolicy::Copy()); + auto dup = pool->saveString(str); if (!dup) return false; - dst->setRawString(dup.c_str(), str.size()); + dst->setRawString(dup, str.size()); return true; } default: @@ -115,9 +114,20 @@ inline void variantSetString(VariantData* var, TAdaptedString value, if (!var) return; variantRelease(var, pool); - JsonString str = storeString(pool, value); - if (str) - var->setString(str); + + if (value.isNull()) { + var->setNull(); + return; + } + + if (value.isLinked()) { + var->setString(JsonString(value.data(), value.size(), JsonString::Linked)); + return; + } + + auto dup = pool->saveString(value); + if (dup) + var->setString(JsonString(dup, value.size(), JsonString::Copied)); else var->setNull(); }