knowL: Knowledge Libraries
Loading...
Searching...
No Matches
VariantMarshal.h
1
2#pragma once
3
4#include <QVariant>
5#include <knowCore/BigNumber.h>
6#include <knowRDF/Literal.h>
7
8namespace knowRDF
9{
10 template<typename _T_>
11 struct VariantMarshal;
12
13 template<typename _T_, typename _DO_NOT_SPECIALISED_ = void>
14 QVariant toVariant(const _T_& _t)
15 {
16 return VariantMarshal<_T_>::convert(_t);
17 }
18 namespace details
19 {
20 template<typename _T_>
21 knowCore::ReturnValue<_T_> fromVariant(const QVariant& _t)
22 {
23 if(_t.userType() == knowRDF::LiteralMetaTypeInformation::id())
24 {
25 return _t.value<knowRDF::Literal>().value<_T_>();
26 }
27 return VariantMarshal<_T_>::convert(_t);
28 }
29 template<>
30 knowCore::ReturnValue<knowCore::BigNumber> fromVariant<knowCore::BigNumber>(const QVariant& _t)
31 {
32 return knowCore::BigNumber::from(_t);
33 }
34 template<>
35 knowCore::ReturnValue<knowRDF::Literal> fromVariant<knowRDF::Literal>(const QVariant& _t)
36 {
37 return knowRDF::Literal::fromVariant(_t); //TODO this would VariantMarshal should be removed in knowCore 2
38 }
39 }
40 template<typename _T_>
41 auto fromVariant = details::fromVariant<_T_>;
42
43 template<typename _T_>
45 {
46 static QVariant convert(const _T_& _t)
47 {
48 return QVariant::fromValue(_t);
49 }
50 static _T_ convert(const QVariant& _t)
51 {
52 return _t.value<_T_>();
53 }
54 };
55 template<>
56 struct VariantMarshal<QVariant>
57 {
58 static QVariant convert(const QVariant& _t)
59 {
60 return _t;
61 }
62 };
63 template<typename _T_>
64 struct VariantMarshal<QList<_T_>>
65 {
66 static QVariant convert(const QList<_T_>& _t)
67 {
68 QVariantList list;
69 for(const _T_& st : _t)
70 {
71 list.append(toVariant(st));
72 }
73 return list;
74 }
75 static QList<_T_> convert(const QVariant& _t)
76 {
77 QList<_T_> list;
78 for(const QVariant& st : _t.toList())
79 {
80 list.append(fromVariant<_T_>(st));
81 }
82 return list;
83 }
84 };
85 template<>
86 struct VariantMarshal<knowRDF::Literal>
87 {
88 static QVariant convert(const knowRDF::Literal& _t)
89 {
90 return _t.toVariant();
91 }
92 static knowRDF::Literal convert(const QVariant& _t)
93 {
94 return knowRDF::Literal::fromVariant(_t).expectSuccess(); //TODO this would VariantMarshal should be removed in knowCore 2
95 }
96 };
97}
98
Definition Forward.h:12
Definition ReturnValue.h:29
QVariant toVariant() const
Definition Value.cpp:219
Definition Literal.h:14
static knowCore::ReturnValue< Literal > fromVariant(const knowCore::Uri &_datatype, const QVariant &_value, const QString &_lang=QString(), knowCore::TypeCheckingMode _conversion=knowCore::TypeCheckingMode::Safe)
Definition Literal.cpp:97
Definition VariantMarshal.h:45