Skip to content

Commit 6a32cdf

Browse files
committed
Merge all RAM string adapters
1 parent 6e0a82a commit 6a32cdf

File tree

4 files changed

+23
-73
lines changed

4 files changed

+23
-73
lines changed

src/ArduinoJson/Strings/Adapters/FlashString.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class FlashString {
3434
return size_;
3535
}
3636

37-
friend bool stringEquals(FlashString a, SizedRamString b) {
37+
friend bool stringEquals(FlashString a, RamString b) {
3838
ARDUINOJSON_ASSERT(a.typeSortKey < b.typeSortKey);
3939
ARDUINOJSON_ASSERT(!a.isNull());
4040
ARDUINOJSON_ASSERT(!b.isNull());
@@ -43,7 +43,7 @@ class FlashString {
4343
return ::memcmp_P(b.data(), a.str_, a.size_) == 0;
4444
}
4545

46-
friend int stringCompare(FlashString a, SizedRamString b) {
46+
friend int stringCompare(FlashString a, RamString b) {
4747
ARDUINOJSON_ASSERT(a.typeSortKey < b.typeSortKey);
4848
ARDUINOJSON_ASSERT(!a.isNull());
4949
ARDUINOJSON_ASSERT(!b.isNull());

src/ArduinoJson/Strings/Adapters/JsonString.hpp

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,12 @@
1010

1111
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
1212

13-
class JsonStringAdapter : public SizedRamString {
14-
public:
15-
JsonStringAdapter(const JsonString& s)
16-
: SizedRamString(s.c_str(), s.size()), linked_(s.isLinked()) {}
17-
18-
bool isLinked() const {
19-
return linked_;
20-
}
21-
22-
private:
23-
bool linked_;
24-
};
25-
2613
template <>
2714
struct StringAdapter<JsonString> {
28-
using AdaptedString = JsonStringAdapter;
15+
using AdaptedString = RamString;
2916

3017
static AdaptedString adapt(const JsonString& s) {
31-
return AdaptedString(s);
18+
return AdaptedString(s.c_str(), s.size(), s.isLinked());
3219
}
3320
};
3421

src/ArduinoJson/Strings/Adapters/RamString.hpp

Lines changed: 18 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,19 @@ template <typename T>
1717
struct IsChar
1818
: integral_constant<bool, is_integral<T>::value && sizeof(T) == 1> {};
1919

20-
class ZeroTerminatedRamString {
20+
class RamString {
2121
public:
22-
static const size_t typeSortKey = 3;
22+
static const size_t typeSortKey = 2;
2323

24-
ZeroTerminatedRamString(const char* str) : str_(str) {}
24+
RamString(const char* str, size_t sz, bool linked = false)
25+
: str_(str), size_(sz), linked_(linked) {}
2526

2627
bool isNull() const {
2728
return !str_;
2829
}
2930

30-
FORCE_INLINE size_t size() const {
31-
return str_ ? ::strlen(str_) : 0;
31+
size_t size() const {
32+
return size_;
3233
}
3334

3435
char operator[](size_t i) const {
@@ -42,85 +43,47 @@ class ZeroTerminatedRamString {
4243
}
4344

4445
bool isLinked() const {
45-
return false;
46+
return linked_;
4647
}
4748

4849
protected:
4950
const char* str_;
51+
size_t size_;
52+
bool linked_; // TODO: merge with size_
5053
};
5154

5255
template <typename TChar>
5356
struct StringAdapter<TChar*, enable_if_t<IsChar<TChar>::value>> {
54-
using AdaptedString = ZeroTerminatedRamString;
57+
using AdaptedString = RamString;
5558

5659
static AdaptedString adapt(const TChar* p) {
57-
return AdaptedString(reinterpret_cast<const char*>(p));
60+
auto str = reinterpret_cast<const char*>(p);
61+
return AdaptedString(str, str ? ::strlen(str) : 0);
5862
}
5963
};
6064

6165
template <typename TChar, size_t N>
6266
struct StringAdapter<TChar[N], enable_if_t<IsChar<TChar>::value>> {
63-
using AdaptedString = ZeroTerminatedRamString;
67+
using AdaptedString = RamString;
6468

6569
static AdaptedString adapt(const TChar* p) {
66-
return AdaptedString(reinterpret_cast<const char*>(p));
67-
}
68-
};
69-
70-
class StaticStringAdapter : public ZeroTerminatedRamString {
71-
public:
72-
StaticStringAdapter(const char* str) : ZeroTerminatedRamString(str) {}
73-
74-
bool isLinked() const {
75-
return true;
70+
auto str = reinterpret_cast<const char*>(p);
71+
return AdaptedString(str, str ? ::strlen(str) : 0);
7672
}
7773
};
7874

7975
template <>
8076
struct StringAdapter<const char*, void> {
81-
using AdaptedString = StaticStringAdapter;
77+
using AdaptedString = RamString;
8278

8379
static AdaptedString adapt(const char* p) {
84-
return AdaptedString(p);
85-
}
86-
};
87-
88-
class SizedRamString {
89-
public:
90-
static const size_t typeSortKey = 2;
91-
92-
SizedRamString(const char* str, size_t sz) : str_(str), size_(sz) {}
93-
94-
bool isNull() const {
95-
return !str_;
96-
}
97-
98-
size_t size() const {
99-
return size_;
100-
}
101-
102-
char operator[](size_t i) const {
103-
ARDUINOJSON_ASSERT(str_ != 0);
104-
ARDUINOJSON_ASSERT(i <= size());
105-
return str_[i];
106-
}
107-
108-
const char* data() const {
109-
return str_;
110-
}
111-
112-
bool isLinked() const {
113-
return false;
80+
return AdaptedString(p, p ? ::strlen(p) : 0, true);
11481
}
115-
116-
protected:
117-
const char* str_;
118-
size_t size_;
11982
};
12083

12184
template <typename TChar>
12285
struct SizedStringAdapter<TChar*, enable_if_t<IsChar<TChar>::value>> {
123-
using AdaptedString = SizedRamString;
86+
using AdaptedString = RamString;
12487

12588
static AdaptedString adapt(const TChar* p, size_t n) {
12689
return AdaptedString(reinterpret_cast<const char*>(p), n);

src/ArduinoJson/Strings/Adapters/StringObject.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ struct StringAdapter<
1515
T,
1616
enable_if_t<(string_traits<T>::has_cstr || string_traits<T>::has_data) &&
1717
(string_traits<T>::has_length || string_traits<T>::has_size)>> {
18-
using AdaptedString = SizedRamString;
18+
using AdaptedString = RamString;
1919

2020
static AdaptedString adapt(const T& s) {
2121
return AdaptedString(get_data(s), get_size(s));

0 commit comments

Comments
 (0)