Skip to content

Commit 6c71ce4

Browse files
committed
WIP
1 parent 31253db commit 6c71ce4

File tree

3 files changed

+63
-19
lines changed

3 files changed

+63
-19
lines changed

src/ArduinoJson/Strings/Adapters/RamString.hpp

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -71,32 +71,16 @@ struct StringAdapter<TChar*, enable_if_t<IsChar<TChar>::value>> {
7171
};
7272

7373
template <typename TChar, size_t N>
74-
struct StringAdapter<TChar[N], enable_if_t<IsChar<TChar>::value>> {
74+
struct StringAdapter<
75+
TChar[N],
76+
enable_if_t<IsChar<TChar>::value && !is_same<const char, TChar>::value>> {
7577
using AdaptedString = ZeroTerminatedRamString;
7678

7779
static AdaptedString adapt(const TChar* p) {
7880
return AdaptedString(reinterpret_cast<const char*>(p));
7981
}
8082
};
8183

82-
class StaticStringAdapter : public ZeroTerminatedRamString {
83-
public:
84-
StaticStringAdapter(const char* str) : ZeroTerminatedRamString(str) {}
85-
86-
bool isLinked() const {
87-
return true;
88-
}
89-
};
90-
91-
template <>
92-
struct StringAdapter<const char*, void> {
93-
using AdaptedString = StaticStringAdapter;
94-
95-
static AdaptedString adapt(const char* p) {
96-
return AdaptedString(p);
97-
}
98-
};
99-
10084
class SizedRamString {
10185
public:
10286
static const size_t typeSortKey = 2;
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// ArduinoJson - https://arduinojson.org
2+
// Copyright © 2014-2024, Benoit BLANCHON
3+
// MIT License
4+
5+
#pragma once
6+
7+
#include <stddef.h> // size_t
8+
#include <string.h> // strcmp
9+
10+
#include <ArduinoJson/Polyfills/assert.hpp>
11+
#include <ArduinoJson/Polyfills/attributes.hpp>
12+
#include <ArduinoJson/Strings/StringAdapter.hpp>
13+
14+
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
15+
16+
template <size_t N>
17+
class StringLiteral {
18+
public:
19+
static const size_t typeSortKey = 2;
20+
21+
StringLiteral(const char* str) : str_(str) {}
22+
23+
bool isNull() const {
24+
return !str_;
25+
}
26+
27+
size_t size() const {
28+
return N - 1;
29+
}
30+
31+
char operator[](size_t i) const {
32+
ARDUINOJSON_ASSERT(str_ != 0);
33+
ARDUINOJSON_ASSERT(i <= size());
34+
return str_[i];
35+
}
36+
37+
const char* data() const {
38+
return str_;
39+
}
40+
41+
bool isLinked() const {
42+
return true;
43+
}
44+
45+
protected:
46+
const char* str_;
47+
};
48+
49+
template <size_t N>
50+
struct StringAdapter<const char[N]> {
51+
using AdaptedString = StringLiteral<N>;
52+
53+
static AdaptedString adapt(const char (&p)[N]) {
54+
return AdaptedString(p);
55+
}
56+
};
57+
58+
ARDUINOJSON_END_PRIVATE_NAMESPACE

src/ArduinoJson/Strings/StringAdapters.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
#include <ArduinoJson/Polyfills/type_traits.hpp>
88
#include <ArduinoJson/Strings/Adapters/JsonString.hpp>
99
#include <ArduinoJson/Strings/Adapters/RamString.hpp>
10+
#include <ArduinoJson/Strings/Adapters/StringLiteral.hpp>
1011
#include <ArduinoJson/Strings/Adapters/StringObject.hpp>
1112

13+
1214
#if ARDUINOJSON_ENABLE_PROGMEM
1315
# include <ArduinoJson/Strings/Adapters/FlashString.hpp>
1416
#endif

0 commit comments

Comments
 (0)