mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-17 20:42:24 +02:00
Replace CopiedString
and LinkedString
with JsonString
This commit is contained in:
@ -18,7 +18,7 @@ TEST_CASE("StringCopier") {
|
|||||||
str.append("hello");
|
str.append("hello");
|
||||||
|
|
||||||
REQUIRE(str.isValid() == true);
|
REQUIRE(str.isValid() == true);
|
||||||
REQUIRE(std::string(str.str()) == "hello");
|
REQUIRE(str.str() == "hello");
|
||||||
REQUIRE(pool.overflowed() == false);
|
REQUIRE(pool.overflowed() == false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,7 +231,7 @@ class JsonDeserializer {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
typename TStringStorage::string_type key = _stringStorage.str();
|
String key = _stringStorage.str();
|
||||||
|
|
||||||
TFilter memberFilter = filter[key.c_str()];
|
TFilter memberFilter = filter[key.c_str()];
|
||||||
|
|
||||||
|
@ -417,7 +417,7 @@ class MsgPackDeserializer {
|
|||||||
if (!readKey())
|
if (!readKey())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
typename TStringStorage::string_type key = _stringStorage.str();
|
String key = _stringStorage.str();
|
||||||
TFilter memberFilter = filter[key.c_str()];
|
TFilter memberFilter = filter[key.c_str()];
|
||||||
VariantData *member;
|
VariantData *member;
|
||||||
|
|
||||||
|
@ -10,8 +10,6 @@ namespace ARDUINOJSON_NAMESPACE {
|
|||||||
|
|
||||||
class StringCopier {
|
class StringCopier {
|
||||||
public:
|
public:
|
||||||
typedef CopiedString string_type;
|
|
||||||
|
|
||||||
StringCopier(MemoryPool& pool) : _pool(&pool) {}
|
StringCopier(MemoryPool& pool) : _pool(&pool) {}
|
||||||
|
|
||||||
void startString() {
|
void startString() {
|
||||||
@ -21,10 +19,10 @@ class StringCopier {
|
|||||||
_pool->markAsOverflowed();
|
_pool->markAsOverflowed();
|
||||||
}
|
}
|
||||||
|
|
||||||
string_type save() {
|
String save() {
|
||||||
ARDUINOJSON_ASSERT(_ptr);
|
ARDUINOJSON_ASSERT(_ptr);
|
||||||
ARDUINOJSON_ASSERT(_size < _capacity); // needs room for the terminator
|
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) {
|
void append(const char* s) {
|
||||||
@ -50,11 +48,11 @@ class StringCopier {
|
|||||||
return _size;
|
return _size;
|
||||||
}
|
}
|
||||||
|
|
||||||
string_type str() const {
|
String str() const {
|
||||||
ARDUINOJSON_ASSERT(_ptr);
|
ARDUINOJSON_ASSERT(_ptr);
|
||||||
ARDUINOJSON_ASSERT(_size < _capacity);
|
ARDUINOJSON_ASSERT(_size < _capacity);
|
||||||
_ptr[_size] = 0;
|
_ptr[_size] = 0;
|
||||||
return string_type(_ptr, _size);
|
return String(_ptr, _size, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -5,23 +5,21 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ArduinoJson/Namespace.hpp>
|
#include <ArduinoJson/Namespace.hpp>
|
||||||
#include <ArduinoJson/Strings/StoredString.hpp>
|
#include <ArduinoJson/Strings/String.hpp>
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE {
|
namespace ARDUINOJSON_NAMESPACE {
|
||||||
|
|
||||||
class StringMover {
|
class StringMover {
|
||||||
public:
|
public:
|
||||||
typedef LinkedString string_type;
|
|
||||||
|
|
||||||
StringMover(char* ptr) : _writePtr(ptr) {}
|
StringMover(char* ptr) : _writePtr(ptr) {}
|
||||||
|
|
||||||
void startString() {
|
void startString() {
|
||||||
_startPtr = _writePtr;
|
_startPtr = _writePtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE string_type save() {
|
FORCE_INLINE String save() {
|
||||||
_writePtr[0] = 0; // terminator
|
_writePtr[0] = 0; // terminator
|
||||||
string_type s = str();
|
String s = str();
|
||||||
_writePtr++;
|
_writePtr++;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@ -34,8 +32,8 @@ class StringMover {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
string_type str() const {
|
String str() const {
|
||||||
return string_type(_startPtr, size());
|
return String(_startPtr, size(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t size() const {
|
size_t size() const {
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ArduinoJson/Memory/MemoryPool.hpp>
|
#include <ArduinoJson/Memory/MemoryPool.hpp>
|
||||||
#include <ArduinoJson/Strings/StoredString.hpp>
|
|
||||||
#include <ArduinoJson/Strings/String.hpp>
|
#include <ArduinoJson/Strings/String.hpp>
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE {
|
namespace ARDUINOJSON_NAMESPACE {
|
||||||
@ -13,15 +12,13 @@ namespace ARDUINOJSON_NAMESPACE {
|
|||||||
struct LinkStringStoragePolicy {
|
struct LinkStringStoragePolicy {
|
||||||
template <typename TAdaptedString, typename TCallback>
|
template <typename TAdaptedString, typename TCallback>
|
||||||
bool store(TAdaptedString str, MemoryPool *, TCallback callback) {
|
bool store(TAdaptedString str, MemoryPool *, TCallback callback) {
|
||||||
LinkedString storedString(str.data(), str.size());
|
String storedString(str.data(), str.size(), true);
|
||||||
callback(storedString);
|
callback(storedString);
|
||||||
return !str.isNull();
|
return !str.isNull();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CopyStringStoragePolicy {
|
struct CopyStringStoragePolicy {
|
||||||
typedef CopiedString TResult;
|
|
||||||
|
|
||||||
template <typename TAdaptedString, typename TCallback>
|
template <typename TAdaptedString, typename TCallback>
|
||||||
bool store(TAdaptedString str, MemoryPool *pool, TCallback callback);
|
bool store(TAdaptedString str, MemoryPool *pool, TCallback callback);
|
||||||
};
|
};
|
||||||
|
@ -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
|
|
@ -206,9 +206,9 @@ class MemoryPoolPrint : public Print {
|
|||||||
pool->getFreeZone(&_string, &_capacity);
|
pool->getFreeZone(&_string, &_capacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
CopiedString str() {
|
String str() {
|
||||||
ARDUINOJSON_ASSERT(_size < _capacity);
|
ARDUINOJSON_ASSERT(_size < _capacity);
|
||||||
return CopiedString(_pool->saveStringFromFreeZone(_size), _size);
|
return String(_pool->saveStringFromFreeZone(_size), _size, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t write(uint8_t c) {
|
size_t write(uint8_t c) {
|
||||||
|
@ -208,16 +208,12 @@ class VariantData {
|
|||||||
setType(VALUE_IS_NULL);
|
setType(VALUE_IS_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setString(CopiedString s) {
|
void setString(String s) {
|
||||||
ARDUINOJSON_ASSERT(s);
|
ARDUINOJSON_ASSERT(s);
|
||||||
setType(VALUE_IS_OWNED_STRING);
|
if (s.isStatic())
|
||||||
_content.asString.data = s.c_str();
|
setType(VALUE_IS_LINKED_STRING);
|
||||||
_content.asString.size = s.size();
|
else
|
||||||
}
|
setType(VALUE_IS_OWNED_STRING);
|
||||||
|
|
||||||
void setString(LinkedString s) {
|
|
||||||
ARDUINOJSON_ASSERT(s);
|
|
||||||
setType(VALUE_IS_LINKED_STRING);
|
|
||||||
_content.asString.data = s.c_str();
|
_content.asString.data = s.c_str();
|
||||||
_content.asString.size = s.size();
|
_content.asString.size = s.size();
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,7 @@ template <typename TAdaptedString, typename TCallback>
|
|||||||
bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool,
|
bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool,
|
||||||
TCallback callback) {
|
TCallback callback) {
|
||||||
const char *copy = pool->saveString(str);
|
const char *copy = pool->saveString(str);
|
||||||
CopiedString storedString(copy, str.size());
|
String storedString(copy, str.size(), false);
|
||||||
callback(storedString);
|
callback(storedString);
|
||||||
return copy != 0;
|
return copy != 0;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
#include <ArduinoJson/Polyfills/integer.hpp>
|
#include <ArduinoJson/Polyfills/integer.hpp>
|
||||||
#include <ArduinoJson/Polyfills/limits.hpp>
|
#include <ArduinoJson/Polyfills/limits.hpp>
|
||||||
#include <ArduinoJson/Polyfills/type_traits.hpp>
|
#include <ArduinoJson/Polyfills/type_traits.hpp>
|
||||||
#include <ArduinoJson/Strings/StoredString.hpp>
|
|
||||||
#include <ArduinoJson/Variant/VariantContent.hpp>
|
#include <ArduinoJson/Variant/VariantContent.hpp>
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE {
|
namespace ARDUINOJSON_NAMESPACE {
|
||||||
@ -77,15 +76,12 @@ class VariantSlot {
|
|||||||
_next = VariantSlotDiff(slot - this);
|
_next = VariantSlotDiff(slot - this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setKey(CopiedString k) {
|
void setKey(String k) {
|
||||||
ARDUINOJSON_ASSERT(k);
|
ARDUINOJSON_ASSERT(k);
|
||||||
_flags |= OWNED_KEY_BIT;
|
if (k.isStatic())
|
||||||
_key = k.c_str();
|
_flags &= VALUE_MASK;
|
||||||
}
|
else
|
||||||
|
_flags |= OWNED_KEY_BIT;
|
||||||
void setKey(LinkedString k) {
|
|
||||||
ARDUINOJSON_ASSERT(k);
|
|
||||||
_flags &= VALUE_MASK;
|
|
||||||
_key = k.c_str();
|
_key = k.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user