diff --git a/src/knowCore/ValueHash.cpp b/src/knowCore/ValueHash.cpp index 34a6bd9b0589e0074342e8e1fc39bb66ce738dca..6d31a133a0e4a603639e7235099f62d53bd52e7c 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 5a35fbec29ec9487f875663e87919b21b9821e33..e8f7ef643977f4ce456d1b1d4f55ed71c38105ee 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 c65c0cd5f1b24e31ac37b2b8503896be038f7fa4..cdc487d4d7d0f66b51814c9b6d6d57d3cfaeb556 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 551af43e2f70cd5c7279c6fd07f75ddc6184d0c8..1da7b3efa7346b4264c266bf976e1994c1e3f2aa 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;