Skip to content

Commit a96464b

Browse files
committed
Rewrite all converters
Before: 9802, 8486, 9630, 12418, 9654 After: 9802, 8446, 9630, 12242, 9660 Target: 9800, 8458, 9634, 12290, 9702
1 parent 1347492 commit a96464b

File tree

1 file changed

+39
-18
lines changed

1 file changed

+39
-18
lines changed

src/ArduinoJson/Variant/ConverterImpl.hpp

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,12 @@ struct Converter<T, detail::enable_if_t<detail::is_integral<T>::value &&
6060
: private detail::VariantAttorney {
6161
static bool toJson(T src, JsonVariant dst) {
6262
ARDUINOJSON_ASSERT_INTEGER_TYPE_IS_SUPPORTED(T);
63-
auto variant = getVariantImpl(dst);
64-
variant.clear();
65-
return variant.setInteger(src);
63+
auto data = getData(dst);
64+
auto resources = getResourceManager(dst);
65+
if (!data)
66+
return false;
67+
detail::VariantImpl::clear(data, resources);
68+
return detail::VariantImpl::setInteger(src, data, resources);
6669
}
6770

6871
static T fromJson(JsonVariantConst src) {
@@ -94,9 +97,13 @@ struct Converter<T, detail::enable_if_t<detail::is_enum<T>::value>>
9497
template <>
9598
struct Converter<bool> : private detail::VariantAttorney {
9699
static bool toJson(bool src, JsonVariant dst) {
97-
auto variant = getVariantImpl(dst);
98-
variant.clear();
99-
return variant.setBoolean(src);
100+
auto data = getData(dst);
101+
auto resources = getResourceManager(dst);
102+
if (!data)
103+
return false;
104+
detail::VariantImpl::clear(data, resources);
105+
data->setBoolean(src);
106+
return true;
100107
}
101108

102109
static bool fromJson(JsonVariantConst src) {
@@ -134,9 +141,12 @@ struct Converter<T, detail::enable_if_t<detail::is_floating_point<T>::value>>
134141
template <>
135142
struct Converter<const char*> : private detail::VariantAttorney {
136143
static void toJson(const char* src, JsonVariant dst) {
137-
auto variant = getVariantImpl(dst);
138-
variant.clear();
139-
variant.setString(detail::adaptString(src));
144+
auto data = getData(dst);
145+
auto resources = getResourceManager(dst);
146+
if (!data)
147+
return;
148+
detail::VariantImpl::clear(data, resources);
149+
detail::VariantImpl::setString(detail::adaptString(src), data, resources);
140150
}
141151

142152
static const char* fromJson(JsonVariantConst src) {
@@ -151,10 +161,14 @@ struct Converter<const char*> : private detail::VariantAttorney {
151161

152162
template <>
153163
struct Converter<JsonString> : private detail::VariantAttorney {
154-
static void toJson(JsonString src, JsonVariant dst) {
155-
auto variant = getVariantImpl(dst);
156-
variant.clear();
157-
variant.setString(detail::adaptString(src));
164+
static bool toJson(JsonString src, JsonVariant dst) {
165+
auto data = getData(dst);
166+
auto resources = getResourceManager(dst);
167+
if (!data)
168+
return false;
169+
detail::VariantImpl::clear(data, resources);
170+
return detail::VariantImpl::setString(detail::adaptString(src), data,
171+
resources);
158172
}
159173

160174
static JsonString fromJson(JsonVariantConst src) {
@@ -168,11 +182,15 @@ struct Converter<JsonString> : private detail::VariantAttorney {
168182
};
169183

170184
template <typename T>
171-
inline detail::enable_if_t<detail::IsString<T>::value> convertToJson(
185+
inline detail::enable_if_t<detail::IsString<T>::value, bool> convertToJson(
172186
const T& src, JsonVariant dst) {
173-
auto variant = detail::VariantAttorney::getVariantImpl(dst);
174-
variant.clear();
175-
variant.setString(detail::adaptString(src));
187+
auto data = detail::VariantAttorney::getData(dst);
188+
auto resources = detail::VariantAttorney::getResourceManager(dst);
189+
if (!data)
190+
return false;
191+
detail::VariantImpl::clear(data, resources);
192+
return detail::VariantImpl::setString(detail::adaptString(src), data,
193+
resources);
176194
}
177195

178196
// SerializedValue<std::string>
@@ -190,7 +208,10 @@ struct Converter<SerializedValue<T>> : private detail::VariantAttorney {
190208
template <>
191209
struct Converter<detail::nullptr_t> : private detail::VariantAttorney {
192210
static void toJson(detail::nullptr_t, JsonVariant dst) {
193-
getVariantImpl(dst).clear();
211+
auto data = getData(dst);
212+
auto resources = getResourceManager(dst);
213+
if (data)
214+
detail::VariantImpl::clear(data, resources);
194215
}
195216
static detail::nullptr_t fromJson(JsonVariantConst) {
196217
return nullptr;

0 commit comments

Comments
 (0)