mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-06-25 09:21:34 +02:00
Replace JsonString::Ownership
with bool
This commit is contained in:
@ -8,6 +8,7 @@ HEAD
|
|||||||
* Make `ElementProxy` and `MemberProxy` non-copyable
|
* Make `ElementProxy` and `MemberProxy` non-copyable
|
||||||
* Change string copy policy: only string literal are stored by pointer
|
* Change string copy policy: only string literal are stored by pointer
|
||||||
* `JsonString` is now stored by copy, unless specified otherwise
|
* `JsonString` is now stored by copy, unless specified otherwise
|
||||||
|
* Replace undocumented `JsonString::Ownership` with `bool`
|
||||||
|
|
||||||
> ### BREAKING CHANGES
|
> ### BREAKING CHANGES
|
||||||
>
|
>
|
||||||
|
@ -158,7 +158,7 @@ TEST_CASE("JsonObject::operator[]") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SECTION("should duplicate a non-static JsonString key") {
|
SECTION("should duplicate a non-static JsonString key") {
|
||||||
obj[JsonString("hello", JsonString::Copied)] = "world";
|
obj[JsonString("hello", false)] = "world";
|
||||||
REQUIRE(spy.log() == AllocatorLog{
|
REQUIRE(spy.log() == AllocatorLog{
|
||||||
Allocate(sizeofPool()),
|
Allocate(sizeofPool()),
|
||||||
Allocate(sizeofString("hello")),
|
Allocate(sizeofString("hello")),
|
||||||
@ -166,7 +166,7 @@ TEST_CASE("JsonObject::operator[]") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SECTION("should not duplicate a static JsonString key") {
|
SECTION("should not duplicate a static JsonString key") {
|
||||||
obj[JsonString("hello", JsonString::Linked)] = "world";
|
obj[JsonString("hello", true)] = "world";
|
||||||
REQUIRE(spy.log() == AllocatorLog{
|
REQUIRE(spy.log() == AllocatorLog{
|
||||||
Allocate(sizeofPool()),
|
Allocate(sizeofPool()),
|
||||||
});
|
});
|
||||||
|
@ -132,7 +132,7 @@ TEST_CASE("JsonVariant::set() when there is enough memory") {
|
|||||||
char str[16];
|
char str[16];
|
||||||
|
|
||||||
strcpy(str, "hello");
|
strcpy(str, "hello");
|
||||||
bool result = variant.set(JsonString(str, JsonString::Linked));
|
bool result = variant.set(JsonString(str, true));
|
||||||
strcpy(str, "world");
|
strcpy(str, "world");
|
||||||
|
|
||||||
REQUIRE(result == true);
|
REQUIRE(result == true);
|
||||||
@ -144,7 +144,7 @@ TEST_CASE("JsonVariant::set() when there is enough memory") {
|
|||||||
char str[16];
|
char str[16];
|
||||||
|
|
||||||
strcpy(str, "hello");
|
strcpy(str, "hello");
|
||||||
bool result = variant.set(JsonString(str, JsonString::Copied));
|
bool result = variant.set(JsonString(str));
|
||||||
strcpy(str, "world");
|
strcpy(str, "world");
|
||||||
|
|
||||||
REQUIRE(result == true);
|
REQUIRE(result == true);
|
||||||
|
@ -101,7 +101,7 @@ TEST_CASE("adaptString()") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SECTION("JsonString linked") {
|
SECTION("JsonString linked") {
|
||||||
JsonString orig("hello", JsonString::Ownership::Linked);
|
JsonString orig("hello", true);
|
||||||
auto s = adaptString(orig);
|
auto s = adaptString(orig);
|
||||||
|
|
||||||
CHECK(s.isNull() == false);
|
CHECK(s.isNull() == false);
|
||||||
@ -110,7 +110,7 @@ TEST_CASE("adaptString()") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SECTION("JsonString copied") {
|
SECTION("JsonString copied") {
|
||||||
JsonString orig("hello", JsonString::Ownership::Copied);
|
JsonString orig("hello", false);
|
||||||
auto s = adaptString(orig);
|
auto s = adaptString(orig);
|
||||||
|
|
||||||
CHECK(s.isNull() == false);
|
CHECK(s.isNull() == false);
|
||||||
|
@ -139,8 +139,7 @@ TEST_CASE("serialize MsgPack value") {
|
|||||||
|
|
||||||
SECTION("str 32") {
|
SECTION("str 32") {
|
||||||
std::string shortest(65536, '?');
|
std::string shortest(65536, '?');
|
||||||
checkVariant(JsonString(shortest.c_str(),
|
checkVariant(JsonString(shortest.c_str(), true), // force store by pointer
|
||||||
JsonString::Linked), // force store by pointer
|
|
||||||
"\xDB\x00\x01\x00\x00"_s + shortest);
|
"\xDB\x00\x01\x00\x00"_s + shortest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ class StringBuffer {
|
|||||||
JsonString str() const {
|
JsonString str() const {
|
||||||
ARDUINOJSON_ASSERT(node_ != nullptr);
|
ARDUINOJSON_ASSERT(node_ != nullptr);
|
||||||
|
|
||||||
return JsonString(node_->data, node_->length, JsonString::Copied);
|
return JsonString(node_->data, node_->length);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -68,7 +68,7 @@ class StringBuilder {
|
|||||||
JsonString str() const {
|
JsonString str() const {
|
||||||
ARDUINOJSON_ASSERT(node_ != nullptr);
|
ARDUINOJSON_ASSERT(node_ != nullptr);
|
||||||
node_->data[size_] = 0;
|
node_->data[size_] = 0;
|
||||||
return JsonString(node_->data, size_, JsonString::Copied);
|
return JsonString(node_->data, size_);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <ArduinoJson/Polyfills/type_traits.hpp>
|
||||||
#include <ArduinoJson/Strings/Adapters/RamString.hpp>
|
#include <ArduinoJson/Strings/Adapters/RamString.hpp>
|
||||||
|
|
||||||
#if ARDUINOJSON_ENABLE_STD_STREAM
|
#if ARDUINOJSON_ENABLE_STD_STREAM
|
||||||
@ -18,15 +19,16 @@ class JsonString {
|
|||||||
friend struct detail::StringAdapter<JsonString>;
|
friend struct detail::StringAdapter<JsonString>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum Ownership { Copied, Linked };
|
|
||||||
|
|
||||||
JsonString() : str_(nullptr, 0, true) {}
|
JsonString() : str_(nullptr, 0, true) {}
|
||||||
|
|
||||||
JsonString(const char* data, Ownership ownership = Copied)
|
JsonString(const char* data, bool isStatic = false)
|
||||||
: str_(data, data ? ::strlen(data) : 0, ownership == Linked) {}
|
: str_(data, data ? ::strlen(data) : 0, isStatic) {}
|
||||||
|
|
||||||
JsonString(const char* data, size_t sz, Ownership ownership = Copied)
|
template <typename TSize, typename = detail::enable_if_t<
|
||||||
: str_(data, sz, ownership == Linked) {}
|
detail::is_integral<TSize>::value &&
|
||||||
|
!detail::is_same<TSize, bool>::value>>
|
||||||
|
JsonString(const char* data, TSize sz, bool isStatic = false)
|
||||||
|
: str_(data, size_t(sz), isStatic) {}
|
||||||
|
|
||||||
// Returns a pointer to the characters.
|
// Returns a pointer to the characters.
|
||||||
const char* c_str() const {
|
const char* c_str() const {
|
||||||
|
@ -64,13 +64,11 @@ class VariantData {
|
|||||||
return visit.visit(content_.asObject);
|
return visit.visit(content_.asObject);
|
||||||
|
|
||||||
case VariantType::LinkedString:
|
case VariantType::LinkedString:
|
||||||
return visit.visit(
|
return visit.visit(JsonString(content_.asLinkedString, true));
|
||||||
JsonString(content_.asLinkedString, JsonString::Linked));
|
|
||||||
|
|
||||||
case VariantType::OwnedString:
|
case VariantType::OwnedString:
|
||||||
return visit.visit(JsonString(content_.asOwnedString->data,
|
return visit.visit(JsonString(content_.asOwnedString->data,
|
||||||
content_.asOwnedString->length,
|
content_.asOwnedString->length));
|
||||||
JsonString::Copied));
|
|
||||||
|
|
||||||
case VariantType::RawString:
|
case VariantType::RawString:
|
||||||
return visit.visit(RawString(content_.asOwnedString->data,
|
return visit.visit(RawString(content_.asOwnedString->data,
|
||||||
@ -262,7 +260,7 @@ class VariantData {
|
|||||||
switch (type_) {
|
switch (type_) {
|
||||||
case VariantType::RawString:
|
case VariantType::RawString:
|
||||||
return JsonString(content_.asOwnedString->data,
|
return JsonString(content_.asOwnedString->data,
|
||||||
content_.asOwnedString->length, JsonString::Copied);
|
content_.asOwnedString->length);
|
||||||
default:
|
default:
|
||||||
return JsonString();
|
return JsonString();
|
||||||
}
|
}
|
||||||
@ -271,10 +269,10 @@ class VariantData {
|
|||||||
JsonString asString() const {
|
JsonString asString() const {
|
||||||
switch (type_) {
|
switch (type_) {
|
||||||
case VariantType::LinkedString:
|
case VariantType::LinkedString:
|
||||||
return JsonString(content_.asLinkedString, JsonString::Linked);
|
return JsonString(content_.asLinkedString, true);
|
||||||
case VariantType::OwnedString:
|
case VariantType::OwnedString:
|
||||||
return JsonString(content_.asOwnedString->data,
|
return JsonString(content_.asOwnedString->data,
|
||||||
content_.asOwnedString->length, JsonString::Copied);
|
content_.asOwnedString->length);
|
||||||
default:
|
default:
|
||||||
return JsonString();
|
return JsonString();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user