From 8d957b7bd53fb0428e579e9b51c22a1df7361e91 Mon Sep 17 00:00:00 2001 From: Cyrille Berger <cyrille.berger@liu.se> Date: Wed, 29 May 2024 18:20:37 +0200 Subject: [PATCH] add convenient function to convert ValueHash/ValueList to VariantHash/Map/VariantList --- src/knowCore/ValueHash.cpp | 27 +++++++++++++++++++++++++++ src/knowCore/ValueHash.h | 15 ++++++++++++--- src/knowCore/ValueList.cpp | 13 +++++++++++++ src/knowCore/ValueList.h | 8 ++++++++ 4 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/knowCore/ValueHash.cpp b/src/knowCore/ValueHash.cpp index 34a6bd9b..6d31a133 100644 --- a/src/knowCore/ValueHash.cpp +++ b/src/knowCore/ValueHash.cpp @@ -197,6 +197,33 @@ ReturnValue<QString> ValueHash::printable() const return kCrvSuccess(clog_qt::qformat("[{}]", strings)); } +QVariantHash ValueHash::toVariantHash() const +{ + QVariantHash values; + QHash<QString, Value> values_ = hash(); + for(auto it = values_.begin(); it != values_.end(); ++it) + { + values[it.key()] = it.value().toVariant(); + } + return values; +} + +QVariantMap ValueHash::toVariantMap() const +{ + QVariantMap values; + QHash<QString, Value> values_ = hash(); + for(auto it = values_.begin(); it != values_.end(); ++it) + { + values[it.key()] = it.value().toVariant(); + } + return values; +} + +QVariant ValueHash::toVariant() const +{ + return toVariantHash(); +} + QHash<QString, Value> ValueHash::hash() const { return d->values; diff --git a/src/knowCore/ValueHash.h b/src/knowCore/ValueHash.h index 5a35fbec..e8f7ef64 100644 --- a/src/knowCore/ValueHash.h +++ b/src/knowCore/ValueHash.h @@ -110,6 +110,15 @@ namespace knowCore ReturnValue<QCborValue> toCborValue(const SerialisationContexts& _contexts) const; static ReturnValue<ValueHash> fromCborValue(const QCborValue& _value, const DeserialisationContexts& _contexts); ReturnValue<QString> printable() const; + /** + * @return a variant hash representation + */ + QVariantHash toVariantHash() const; + /** + * @return a variant map representation + */ + QVariantMap toVariantMap() const; + QVariant toVariant() const; /** * Check that the list only contains value of type \ref _uri. * It returns success if that is true. @@ -228,7 +237,7 @@ namespace knowCore inline ReturnValue<QHash<QString, _T_>> ValueHash::hash() const { QHash<QString, _T_> values; - QHash<QString, Value> values_; + QHash<QString, Value> values_ = hash(); for(auto it = values_.begin(); it != values_.end(); ++it) { KNOWCORE_RETURN_VALUE_TRY(value, it.value().value<_T_>()); @@ -240,7 +249,7 @@ namespace knowCore inline ReturnValue<QMap<QString, _T_>> ValueHash::map() const { QMap<QString, _T_> values; - QHash<QString, Value> values_; + QHash<QString, Value> values_ = hash(); for(auto it = values_.begin(); it != values_.end(); ++it) { KNOWCORE_RETURN_VALUE_TRY(value, it.value().value<_T_>()); @@ -251,7 +260,7 @@ namespace knowCore inline QMap<QString, Value> ValueHash::map() const { QMap<QString, Value> values; - QHash<QString, Value> values_; + QHash<QString, Value> values_ = hash(); for(auto it = values_.begin(); it != values_.end(); ++it) { values[it.key()] = it.value(); diff --git a/src/knowCore/ValueList.cpp b/src/knowCore/ValueList.cpp index c65c0cd5..cdc487d4 100644 --- a/src/knowCore/ValueList.cpp +++ b/src/knowCore/ValueList.cpp @@ -208,6 +208,19 @@ ReturnValue<ValueList> ValueList::fromVariants(const QVariantList& _t) return kCrvSuccess(ValueList(values)); } +QVariantList ValueList::toVariantList() const +{ + QVariantList l; + std::transform(d->values.begin(), d->values.end(), std::back_inserter(l), [](const Value& v) { return v.toVariant(); }); + return l; +} + +QVariant ValueList::toVariant() const +{ + return toVariantList(); +} + + #include <knowCore/Uris/askcore_types.h> #include "MetaTypeImplementation.h" diff --git a/src/knowCore/ValueList.h b/src/knowCore/ValueList.h index 551af43e..1da7b3ef 100644 --- a/src/knowCore/ValueList.h +++ b/src/knowCore/ValueList.h @@ -70,6 +70,14 @@ namespace knowCore template<typename _T_> inline static const ValueList fromValues(const QList<_T_>& _t); static ReturnValue<ValueList> fromVariants(const QVariantList& _t); + /** + * @return a list of variant + */ + QVariantList toVariantList() const; + /** + * @return a variant + */ + QVariant toVariant() const; private: struct Private; QSharedDataPointer<Private> d; -- GitLab