mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-30 02:37:35 +02:00
Remove callback from storeString()
This commit is contained in:
@ -37,10 +37,14 @@ template <typename TAdaptedString>
|
|||||||
inline VariantData* CollectionData::addMember(TAdaptedString key,
|
inline VariantData* CollectionData::addMember(TAdaptedString key,
|
||||||
MemoryPool* pool) {
|
MemoryPool* pool) {
|
||||||
VariantSlot* slot = addSlot(pool);
|
VariantSlot* slot = addSlot(pool);
|
||||||
if (!slotSetKey(slot, key, pool)) {
|
if (!slot)
|
||||||
|
return 0;
|
||||||
|
auto storedKey = storeString(pool, key);
|
||||||
|
if (!storedKey) {
|
||||||
removeSlot(slot);
|
removeSlot(slot);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
slot->setKey(storedKey);
|
||||||
return slot->data();
|
return slot->data();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,35 +273,30 @@ class MemoryPool {
|
|||||||
StringNode* _strings = nullptr;
|
StringNode* _strings = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename TAdaptedString, typename TCallback>
|
template <typename TAdaptedString>
|
||||||
bool storeString(MemoryPool* pool, TAdaptedString str,
|
JsonString storeString(MemoryPool* pool, TAdaptedString str,
|
||||||
StringStoragePolicy::Copy, TCallback callback) {
|
StringStoragePolicy::Copy) {
|
||||||
const char* copy = pool->saveString(str);
|
return JsonString(pool->saveString(str), str.size(), JsonString::Copied);
|
||||||
JsonString storedString(copy, str.size(), JsonString::Copied);
|
|
||||||
callback(storedString);
|
|
||||||
return copy != 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename TAdaptedString, typename TCallback>
|
template <typename TAdaptedString>
|
||||||
bool storeString(MemoryPool*, TAdaptedString str, StringStoragePolicy::Link,
|
JsonString storeString(MemoryPool*, TAdaptedString str,
|
||||||
TCallback callback) {
|
StringStoragePolicy::Link) {
|
||||||
JsonString storedString(str.data(), str.size(), JsonString::Linked);
|
return JsonString(str.data(), str.size(), JsonString::Linked);
|
||||||
callback(storedString);
|
|
||||||
return !str.isNull();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename TAdaptedString, typename TCallback>
|
template <typename TAdaptedString>
|
||||||
bool storeString(MemoryPool* pool, TAdaptedString str,
|
JsonString storeString(MemoryPool* pool, TAdaptedString str,
|
||||||
StringStoragePolicy::LinkOrCopy policy, TCallback callback) {
|
StringStoragePolicy::LinkOrCopy policy) {
|
||||||
if (policy.link)
|
if (policy.link)
|
||||||
return storeString(pool, str, StringStoragePolicy::Link(), callback);
|
return storeString(pool, str, StringStoragePolicy::Link());
|
||||||
else
|
else
|
||||||
return storeString(pool, str, StringStoragePolicy::Copy(), callback);
|
return storeString(pool, str, StringStoragePolicy::Copy());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename TAdaptedString, typename TCallback>
|
template <typename TAdaptedString>
|
||||||
bool storeString(MemoryPool* pool, TAdaptedString str, TCallback callback) {
|
JsonString storeString(MemoryPool* pool, TAdaptedString str) {
|
||||||
return storeString(pool, str, str.storagePolicy(), callback);
|
return storeString(pool, str, str.storagePolicy());
|
||||||
}
|
}
|
||||||
|
|
||||||
ARDUINOJSON_END_PRIVATE_NAMESPACE
|
ARDUINOJSON_END_PRIVATE_NAMESPACE
|
||||||
|
@ -153,12 +153,12 @@ struct Converter<JsonString> : private detail::VariantAttorney {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline typename detail::enable_if<detail::IsString<T>::value, bool>::type
|
inline typename detail::enable_if<detail::IsString<T>::value>::type
|
||||||
convertToJson(const T& src, JsonVariant dst) {
|
convertToJson(const T& src, JsonVariant dst) {
|
||||||
using namespace detail;
|
using namespace detail;
|
||||||
auto data = VariantAttorney::getData(dst);
|
auto data = VariantAttorney::getData(dst);
|
||||||
auto pool = VariantAttorney::getPool(dst);
|
auto pool = VariantAttorney::getPool(dst);
|
||||||
return variantSetString(data, adaptString(src), pool);
|
variantSetString(data, adaptString(src), pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
|
@ -9,27 +9,6 @@
|
|||||||
|
|
||||||
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
|
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
|
||||||
|
|
||||||
struct SlotKeySetter {
|
|
||||||
SlotKeySetter(VariantSlot* instance) : _instance(instance) {}
|
|
||||||
|
|
||||||
template <typename TStoredString>
|
|
||||||
void operator()(TStoredString s) {
|
|
||||||
if (!s)
|
|
||||||
return;
|
|
||||||
ARDUINOJSON_ASSERT(_instance != 0);
|
|
||||||
_instance->setKey(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
VariantSlot* _instance;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename TAdaptedString>
|
|
||||||
inline bool slotSetKey(VariantSlot* var, TAdaptedString key, MemoryPool* pool) {
|
|
||||||
if (!var)
|
|
||||||
return false;
|
|
||||||
return storeString(pool, key, SlotKeySetter(var));
|
|
||||||
}
|
|
||||||
|
|
||||||
inline size_t slotSize(const VariantSlot* var) {
|
inline size_t slotSize(const VariantSlot* var) {
|
||||||
size_t n = 0;
|
size_t n = 0;
|
||||||
while (var) {
|
while (var) {
|
||||||
|
@ -284,35 +284,11 @@ class VariantData {
|
|||||||
return _flags & VALUE_MASK;
|
return _flags & VALUE_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename TAdaptedString>
|
|
||||||
inline bool setString(TAdaptedString value, MemoryPool* pool) {
|
|
||||||
if (value.isNull()) {
|
|
||||||
setNull();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return storeString(pool, value, VariantStringSetter(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setType(uint8_t t) {
|
void setType(uint8_t t) {
|
||||||
_flags &= OWNED_KEY_BIT;
|
_flags &= OWNED_KEY_BIT;
|
||||||
_flags |= t;
|
_flags |= t;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct VariantStringSetter {
|
|
||||||
VariantStringSetter(VariantData* instance) : _instance(instance) {}
|
|
||||||
|
|
||||||
template <typename TStoredString>
|
|
||||||
void operator()(TStoredString s) {
|
|
||||||
if (s)
|
|
||||||
_instance->setString(s);
|
|
||||||
else
|
|
||||||
_instance->setNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
VariantData* _instance;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ARDUINOJSON_END_PRIVATE_NAMESPACE
|
ARDUINOJSON_END_PRIVATE_NAMESPACE
|
||||||
|
@ -38,9 +38,15 @@ inline void variantSetNull(VariantData* var) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename TAdaptedString>
|
template <typename TAdaptedString>
|
||||||
inline bool variantSetString(VariantData* var, TAdaptedString value,
|
inline void variantSetString(VariantData* var, TAdaptedString value,
|
||||||
MemoryPool* pool) {
|
MemoryPool* pool) {
|
||||||
return var != 0 ? var->setString(value, pool) : 0;
|
if (!var)
|
||||||
|
return;
|
||||||
|
JsonString str = storeString(pool, value);
|
||||||
|
if (str)
|
||||||
|
var->setString(str);
|
||||||
|
else
|
||||||
|
var->setNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline size_t variantSize(const VariantData* var) {
|
inline size_t variantSize(const VariantData* var) {
|
||||||
|
@ -90,8 +90,10 @@ inline bool VariantData::copyFrom(const VariantData& src, MemoryPool* pool) {
|
|||||||
case VALUE_IS_OBJECT:
|
case VALUE_IS_OBJECT:
|
||||||
return toObject().copyFrom(src._content.asCollection, pool);
|
return toObject().copyFrom(src._content.asCollection, pool);
|
||||||
case VALUE_IS_OWNED_STRING: {
|
case VALUE_IS_OWNED_STRING: {
|
||||||
JsonString value = src.asString();
|
auto str = storeString(pool, adaptString(src.asString()),
|
||||||
return setString(adaptString(value), pool);
|
StringStoragePolicy::Copy());
|
||||||
|
setString(str);
|
||||||
|
return !str.isNull();
|
||||||
}
|
}
|
||||||
case VALUE_IS_OWNED_RAW:
|
case VALUE_IS_OWNED_RAW:
|
||||||
return storeOwnedRaw(
|
return storeOwnedRaw(
|
||||||
|
Reference in New Issue
Block a user