mirror of
https://github.com/eledio-devices/thirdparty-ArduinoJson.git
synced 2025-11-02 00:38:26 +01:00
Attach copy policy to string adapters
This commit is contained in:
@@ -118,8 +118,7 @@ struct Converter<T, typename enable_if<is_floating_point<T>::value>::type>
|
||||
template <>
|
||||
struct Converter<const char*> : private VariantAttorney {
|
||||
static void toJson(const char* src, VariantRef dst) {
|
||||
variantSetString(getData(dst), adaptString(src), getPool(dst),
|
||||
getStringStoragePolicy(src));
|
||||
variantSetString(getData(dst), adaptString(src), getPool(dst));
|
||||
}
|
||||
|
||||
static const char* fromJson(VariantConstRef src) {
|
||||
@@ -136,8 +135,7 @@ struct Converter<const char*> : private VariantAttorney {
|
||||
template <>
|
||||
struct Converter<String> : private VariantAttorney {
|
||||
static void toJson(String src, VariantRef dst) {
|
||||
variantSetString(getData(dst), adaptString(src), getPool(dst),
|
||||
getStringStoragePolicy(src));
|
||||
variantSetString(getData(dst), adaptString(src), getPool(dst));
|
||||
}
|
||||
|
||||
static String fromJson(VariantConstRef src) {
|
||||
@@ -156,8 +154,7 @@ inline typename enable_if<IsString<T>::value, bool>::type convertToJson(
|
||||
const T& src, VariantRef dst) {
|
||||
VariantData* data = VariantAttorney::getData(dst);
|
||||
MemoryPool* pool = VariantAttorney::getPool(dst);
|
||||
return variantSetString(data, adaptString(src), pool,
|
||||
getStringStoragePolicy(src));
|
||||
return variantSetString(data, adaptString(src), pool);
|
||||
}
|
||||
|
||||
template <>
|
||||
|
||||
@@ -23,12 +23,11 @@ struct SlotKeySetter {
|
||||
VariantSlot* _instance;
|
||||
};
|
||||
|
||||
template <typename TAdaptedString, typename TStoragePolicy>
|
||||
inline bool slotSetKey(VariantSlot* var, TAdaptedString key, MemoryPool* pool,
|
||||
TStoragePolicy storage) {
|
||||
template <typename TAdaptedString>
|
||||
inline bool slotSetKey(VariantSlot* var, TAdaptedString key, MemoryPool* pool) {
|
||||
if (!var)
|
||||
return false;
|
||||
return storage.store(key, pool, SlotKeySetter(var));
|
||||
return storeString(pool, key, SlotKeySetter(var));
|
||||
}
|
||||
|
||||
inline size_t slotSize(const VariantSlot* var) {
|
||||
|
||||
@@ -285,14 +285,13 @@ class VariantData {
|
||||
return col ? col->getMember(key) : 0;
|
||||
}
|
||||
|
||||
template <typename TAdaptedString, typename TStoragePolicy>
|
||||
VariantData* getOrAddMember(TAdaptedString key, MemoryPool* pool,
|
||||
TStoragePolicy storage_policy) {
|
||||
template <typename TAdaptedString>
|
||||
VariantData* getOrAddMember(TAdaptedString key, MemoryPool* pool) {
|
||||
if (isNull())
|
||||
toObject();
|
||||
if (!isObject())
|
||||
return 0;
|
||||
return _content.asCollection.getOrAddMember(key, pool, storage_policy);
|
||||
return _content.asCollection.getOrAddMember(key, pool);
|
||||
}
|
||||
|
||||
void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance) {
|
||||
@@ -306,15 +305,14 @@ class VariantData {
|
||||
return _flags & VALUE_MASK;
|
||||
}
|
||||
|
||||
template <typename TAdaptedString, typename TStoragePolicy>
|
||||
inline bool storeString(TAdaptedString value, MemoryPool* pool,
|
||||
TStoragePolicy storage) {
|
||||
template <typename TAdaptedString>
|
||||
inline bool setString(TAdaptedString value, MemoryPool* pool) {
|
||||
if (value.isNull()) {
|
||||
setNull();
|
||||
return true;
|
||||
}
|
||||
|
||||
return storage.store(value, pool, VariantStringSetter(this));
|
||||
return storeString(pool, value, VariantStringSetter(this));
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@@ -37,10 +37,10 @@ inline void variantSetNull(VariantData* var) {
|
||||
var->setNull();
|
||||
}
|
||||
|
||||
template <typename TAdaptedString, typename TStoragePolicy>
|
||||
template <typename TAdaptedString>
|
||||
inline bool variantSetString(VariantData* var, TAdaptedString value,
|
||||
MemoryPool* pool, TStoragePolicy storage_policy) {
|
||||
return var != 0 ? var->storeString(value, pool, storage_policy) : 0;
|
||||
MemoryPool* pool) {
|
||||
return var != 0 ? var->setString(value, pool) : 0;
|
||||
}
|
||||
|
||||
inline size_t variantSize(const VariantData* var) {
|
||||
@@ -88,8 +88,7 @@ VariantData* variantGetOrAddMember(VariantData* var, TChar* key,
|
||||
MemoryPool* pool) {
|
||||
if (!var)
|
||||
return 0;
|
||||
return var->getOrAddMember(adaptString(key), pool,
|
||||
getStringStoragePolicy(key));
|
||||
return var->getOrAddMember(adaptString(key), pool);
|
||||
}
|
||||
|
||||
template <typename TString>
|
||||
@@ -97,8 +96,7 @@ VariantData* variantGetOrAddMember(VariantData* var, const TString& key,
|
||||
MemoryPool* pool) {
|
||||
if (!var)
|
||||
return 0;
|
||||
return var->getOrAddMember(adaptString(key), pool,
|
||||
getStringStoragePolicy(key));
|
||||
return var->getOrAddMember(adaptString(key), pool);
|
||||
}
|
||||
|
||||
inline bool variantIsNull(const VariantData* var) {
|
||||
|
||||
@@ -91,8 +91,7 @@ inline bool VariantData::copyFrom(const VariantData& src, MemoryPool* pool) {
|
||||
return toObject().copyFrom(src._content.asCollection, pool);
|
||||
case VALUE_IS_OWNED_STRING: {
|
||||
String value = src.asString();
|
||||
return storeString(adaptString(value), pool,
|
||||
getStringStoragePolicy(value));
|
||||
return setString(adaptString(value), pool);
|
||||
}
|
||||
case VALUE_IS_OWNED_RAW:
|
||||
return storeOwnedRaw(
|
||||
@@ -154,14 +153,4 @@ inline void convertToJson(const VariantRefBase<TDataSource>& src,
|
||||
dst.set(src.template as<VariantConstRef>());
|
||||
}
|
||||
|
||||
// TODO: move somewhere else
|
||||
template <typename TAdaptedString, typename TCallback>
|
||||
bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool* pool,
|
||||
TCallback callback) {
|
||||
const char* copy = pool->saveString(str);
|
||||
String storedString(copy, str.size(), String::Copied);
|
||||
callback(storedString);
|
||||
return copy != 0;
|
||||
}
|
||||
|
||||
} // namespace ARDUINOJSON_NAMESPACE
|
||||
|
||||
Reference in New Issue
Block a user