Skip to content

Commit 30c111f

Browse files
committed
Remove callback from storeString()
1 parent 9d0714e commit 30c111f

File tree

7 files changed

+35
-73
lines changed

7 files changed

+35
-73
lines changed

src/ArduinoJson/Collection/CollectionImpl.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,14 @@ template <typename TAdaptedString>
3737
inline VariantData* CollectionData::addMember(TAdaptedString key,
3838
MemoryPool* pool) {
3939
VariantSlot* slot = addSlot(pool);
40-
if (!slotSetKey(slot, key, pool)) {
40+
if (!slot)
41+
return 0;
42+
auto storedKey = storeString(pool, key);
43+
if (!storedKey) {
4144
removeSlot(slot);
4245
return 0;
4346
}
47+
slot->setKey(storedKey);
4448
return slot->data();
4549
}
4650

src/ArduinoJson/Memory/MemoryPool.hpp

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -273,35 +273,30 @@ class MemoryPool {
273273
StringNode* _strings = nullptr;
274274
};
275275

276-
template <typename TAdaptedString, typename TCallback>
277-
bool storeString(MemoryPool* pool, TAdaptedString str,
278-
StringStoragePolicy::Copy, TCallback callback) {
279-
const char* copy = pool->saveString(str);
280-
JsonString storedString(copy, str.size(), JsonString::Copied);
281-
callback(storedString);
282-
return copy != 0;
276+
template <typename TAdaptedString>
277+
JsonString storeString(MemoryPool* pool, TAdaptedString str,
278+
StringStoragePolicy::Copy) {
279+
return JsonString(pool->saveString(str), str.size(), JsonString::Copied);
283280
}
284281

285-
template <typename TAdaptedString, typename TCallback>
286-
bool storeString(MemoryPool*, TAdaptedString str, StringStoragePolicy::Link,
287-
TCallback callback) {
288-
JsonString storedString(str.data(), str.size(), JsonString::Linked);
289-
callback(storedString);
290-
return !str.isNull();
282+
template <typename TAdaptedString>
283+
JsonString storeString(MemoryPool*, TAdaptedString str,
284+
StringStoragePolicy::Link) {
285+
return JsonString(str.data(), str.size(), JsonString::Linked);
291286
}
292287

293-
template <typename TAdaptedString, typename TCallback>
294-
bool storeString(MemoryPool* pool, TAdaptedString str,
295-
StringStoragePolicy::LinkOrCopy policy, TCallback callback) {
288+
template <typename TAdaptedString>
289+
JsonString storeString(MemoryPool* pool, TAdaptedString str,
290+
StringStoragePolicy::LinkOrCopy policy) {
296291
if (policy.link)
297-
return storeString(pool, str, StringStoragePolicy::Link(), callback);
292+
return storeString(pool, str, StringStoragePolicy::Link());
298293
else
299-
return storeString(pool, str, StringStoragePolicy::Copy(), callback);
294+
return storeString(pool, str, StringStoragePolicy::Copy());
300295
}
301296

302-
template <typename TAdaptedString, typename TCallback>
303-
bool storeString(MemoryPool* pool, TAdaptedString str, TCallback callback) {
304-
return storeString(pool, str, str.storagePolicy(), callback);
297+
template <typename TAdaptedString>
298+
JsonString storeString(MemoryPool* pool, TAdaptedString str) {
299+
return storeString(pool, str, str.storagePolicy());
305300
}
306301

307302
ARDUINOJSON_END_PRIVATE_NAMESPACE

src/ArduinoJson/Variant/ConverterImpl.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,12 @@ struct Converter<JsonString> : private detail::VariantAttorney {
153153
};
154154

155155
template <typename T>
156-
inline typename detail::enable_if<detail::IsString<T>::value, bool>::type
156+
inline typename detail::enable_if<detail::IsString<T>::value>::type
157157
convertToJson(const T& src, JsonVariant dst) {
158158
using namespace detail;
159159
auto data = VariantAttorney::getData(dst);
160160
auto pool = VariantAttorney::getPool(dst);
161-
return variantSetString(data, adaptString(src), pool);
161+
variantSetString(data, adaptString(src), pool);
162162
}
163163

164164
template <>

src/ArduinoJson/Variant/SlotFunctions.hpp

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,6 @@
99

1010
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
1111

12-
struct SlotKeySetter {
13-
SlotKeySetter(VariantSlot* instance) : _instance(instance) {}
14-
15-
template <typename TStoredString>
16-
void operator()(TStoredString s) {
17-
if (!s)
18-
return;
19-
ARDUINOJSON_ASSERT(_instance != 0);
20-
_instance->setKey(s);
21-
}
22-
23-
VariantSlot* _instance;
24-
};
25-
26-
template <typename TAdaptedString>
27-
inline bool slotSetKey(VariantSlot* var, TAdaptedString key, MemoryPool* pool) {
28-
if (!var)
29-
return false;
30-
return storeString(pool, key, SlotKeySetter(var));
31-
}
32-
3312
inline size_t slotSize(const VariantSlot* var) {
3413
size_t n = 0;
3514
while (var) {

src/ArduinoJson/Variant/VariantData.hpp

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -284,35 +284,11 @@ class VariantData {
284284
return _flags & VALUE_MASK;
285285
}
286286

287-
template <typename TAdaptedString>
288-
inline bool setString(TAdaptedString value, MemoryPool* pool) {
289-
if (value.isNull()) {
290-
setNull();
291-
return true;
292-
}
293-
294-
return storeString(pool, value, VariantStringSetter(this));
295-
}
296-
297287
private:
298288
void setType(uint8_t t) {
299289
_flags &= OWNED_KEY_BIT;
300290
_flags |= t;
301291
}
302-
303-
struct VariantStringSetter {
304-
VariantStringSetter(VariantData* instance) : _instance(instance) {}
305-
306-
template <typename TStoredString>
307-
void operator()(TStoredString s) {
308-
if (s)
309-
_instance->setString(s);
310-
else
311-
_instance->setNull();
312-
}
313-
314-
VariantData* _instance;
315-
};
316292
};
317293

318294
ARDUINOJSON_END_PRIVATE_NAMESPACE

src/ArduinoJson/Variant/VariantFunctions.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,15 @@ inline void variantSetNull(VariantData* var) {
3838
}
3939

4040
template <typename TAdaptedString>
41-
inline bool variantSetString(VariantData* var, TAdaptedString value,
41+
inline void variantSetString(VariantData* var, TAdaptedString value,
4242
MemoryPool* pool) {
43-
return var != 0 ? var->setString(value, pool) : 0;
43+
if (!var)
44+
return;
45+
JsonString str = storeString(pool, value);
46+
if (str)
47+
var->setString(str);
48+
else
49+
var->setNull();
4450
}
4551

4652
inline size_t variantSize(const VariantData* var) {

src/ArduinoJson/Variant/VariantImpl.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,10 @@ inline bool VariantData::copyFrom(const VariantData& src, MemoryPool* pool) {
9090
case VALUE_IS_OBJECT:
9191
return toObject().copyFrom(src._content.asCollection, pool);
9292
case VALUE_IS_OWNED_STRING: {
93-
JsonString value = src.asString();
94-
return setString(adaptString(value), pool);
93+
auto str = storeString(pool, adaptString(src.asString()),
94+
StringStoragePolicy::Copy());
95+
setString(str);
96+
return !str.isNull();
9597
}
9698
case VALUE_IS_OWNED_RAW:
9799
return storeOwnedRaw(

0 commit comments

Comments
 (0)