Skip to content

Commit ed5f890

Browse files
committed
Replace JsonString::Ownership with bool
1 parent 8931651 commit ed5f890

File tree

9 files changed

+23
-23
lines changed

9 files changed

+23
-23
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ HEAD
88
* Make `ElementProxy` and `MemberProxy` non-copyable
99
* Change string copy policy: only string literal are stored by pointer
1010
* `JsonString` is now stored by copy, unless specified otherwise
11+
* Replace undocumented `JsonString::Ownership` with `bool`
1112

1213
> ### BREAKING CHANGES
1314
>

extras/tests/JsonObject/subscript.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,15 +158,15 @@ TEST_CASE("JsonObject::operator[]") {
158158
}
159159

160160
SECTION("should duplicate a non-static JsonString key") {
161-
obj[JsonString("hello", JsonString::Copied)] = "world";
161+
obj[JsonString("hello", false)] = "world";
162162
REQUIRE(spy.log() == AllocatorLog{
163163
Allocate(sizeofPool()),
164164
Allocate(sizeofString("hello")),
165165
});
166166
}
167167

168168
SECTION("should not duplicate a static JsonString key") {
169-
obj[JsonString("hello", JsonString::Linked)] = "world";
169+
obj[JsonString("hello", true)] = "world";
170170
REQUIRE(spy.log() == AllocatorLog{
171171
Allocate(sizeofPool()),
172172
});

extras/tests/JsonVariant/set.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ TEST_CASE("JsonVariant::set() when there is enough memory") {
132132
char str[16];
133133

134134
strcpy(str, "hello");
135-
bool result = variant.set(JsonString(str, JsonString::Linked));
135+
bool result = variant.set(JsonString(str, true));
136136
strcpy(str, "world");
137137

138138
REQUIRE(result == true);
@@ -144,7 +144,7 @@ TEST_CASE("JsonVariant::set() when there is enough memory") {
144144
char str[16];
145145

146146
strcpy(str, "hello");
147-
bool result = variant.set(JsonString(str, JsonString::Copied));
147+
bool result = variant.set(JsonString(str));
148148
strcpy(str, "world");
149149

150150
REQUIRE(result == true);

extras/tests/Misc/StringAdapters.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ TEST_CASE("adaptString()") {
101101
}
102102

103103
SECTION("JsonString linked") {
104-
JsonString orig("hello", JsonString::Ownership::Linked);
104+
JsonString orig("hello", true);
105105
auto s = adaptString(orig);
106106

107107
CHECK(s.isNull() == false);
@@ -110,7 +110,7 @@ TEST_CASE("adaptString()") {
110110
}
111111

112112
SECTION("JsonString copied") {
113-
JsonString orig("hello", JsonString::Ownership::Copied);
113+
JsonString orig("hello", false);
114114
auto s = adaptString(orig);
115115

116116
CHECK(s.isNull() == false);

extras/tests/MsgPackSerializer/serializeVariant.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,7 @@ TEST_CASE("serialize MsgPack value") {
139139

140140
SECTION("str 32") {
141141
std::string shortest(65536, '?');
142-
checkVariant(JsonString(shortest.c_str(),
143-
JsonString::Linked), // force store by pointer
142+
checkVariant(JsonString(shortest.c_str(), true), // force store by pointer
144143
"\xDB\x00\x01\x00\x00"_s + shortest);
145144
}
146145

src/ArduinoJson/Memory/StringBuffer.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class StringBuffer {
5555
JsonString str() const {
5656
ARDUINOJSON_ASSERT(node_ != nullptr);
5757

58-
return JsonString(node_->data, node_->length, JsonString::Copied);
58+
return JsonString(node_->data, node_->length);
5959
}
6060

6161
private:

src/ArduinoJson/Memory/StringBuilder.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class StringBuilder {
6868
JsonString str() const {
6969
ARDUINOJSON_ASSERT(node_ != nullptr);
7070
node_->data[size_] = 0;
71-
return JsonString(node_->data, size_, JsonString::Copied);
71+
return JsonString(node_->data, size_);
7272
}
7373

7474
private:

src/ArduinoJson/Strings/JsonString.hpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#pragma once
66

7+
#include <ArduinoJson/Polyfills/type_traits.hpp>
78
#include <ArduinoJson/Strings/Adapters/RamString.hpp>
89

910
#if ARDUINOJSON_ENABLE_STD_STREAM
@@ -18,15 +19,16 @@ class JsonString {
1819
friend struct detail::StringAdapter<JsonString>;
1920

2021
public:
21-
enum Ownership { Copied, Linked };
22-
2322
JsonString() : str_(nullptr, 0, true) {}
2423

25-
JsonString(const char* data, Ownership ownership = Copied)
26-
: str_(data, data ? ::strlen(data) : 0, ownership == Linked) {}
24+
JsonString(const char* data, bool isStatic = false)
25+
: str_(data, data ? ::strlen(data) : 0, isStatic) {}
2726

28-
JsonString(const char* data, size_t sz, Ownership ownership = Copied)
29-
: str_(data, sz, ownership == Linked) {}
27+
template <typename TSize, typename = detail::enable_if_t<
28+
detail::is_integral<TSize>::value &&
29+
!detail::is_same<TSize, bool>::value>>
30+
JsonString(const char* data, TSize sz, bool isStatic = false)
31+
: str_(data, size_t(sz), isStatic) {}
3032

3133
// Returns a pointer to the characters.
3234
const char* c_str() const {

src/ArduinoJson/Variant/VariantData.hpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,11 @@ class VariantData {
6464
return visit.visit(content_.asObject);
6565

6666
case VariantType::LinkedString:
67-
return visit.visit(
68-
JsonString(content_.asLinkedString, JsonString::Linked));
67+
return visit.visit(JsonString(content_.asLinkedString, true));
6968

7069
case VariantType::OwnedString:
7170
return visit.visit(JsonString(content_.asOwnedString->data,
72-
content_.asOwnedString->length,
73-
JsonString::Copied));
71+
content_.asOwnedString->length));
7472

7573
case VariantType::RawString:
7674
return visit.visit(RawString(content_.asOwnedString->data,
@@ -262,7 +260,7 @@ class VariantData {
262260
switch (type_) {
263261
case VariantType::RawString:
264262
return JsonString(content_.asOwnedString->data,
265-
content_.asOwnedString->length, JsonString::Copied);
263+
content_.asOwnedString->length);
266264
default:
267265
return JsonString();
268266
}
@@ -271,10 +269,10 @@ class VariantData {
271269
JsonString asString() const {
272270
switch (type_) {
273271
case VariantType::LinkedString:
274-
return JsonString(content_.asLinkedString, JsonString::Linked);
272+
return JsonString(content_.asLinkedString, true);
275273
case VariantType::OwnedString:
276274
return JsonString(content_.asOwnedString->data,
277-
content_.asOwnedString->length, JsonString::Copied);
275+
content_.asOwnedString->length);
278276
default:
279277
return JsonString();
280278
}

0 commit comments

Comments
 (0)