knowL: Knowledge Libraries
Loading...
Searching...
No Matches
ValueHash.h
1#pragma once
2
3#include "Value.h"
4
5namespace knowCore
6{
7 // BEGIN ValueHash
13 {
14 public:
15 ValueHash();
16 template<typename _T_, typename... _TOther_>
17 ValueHash(const QString& _key, const _T_& _t, const _TOther_&...);
18 ValueHash(const QHash<QString, Value>& _value);
19 ValueHash(const ValueHash& _list);
20 ValueHash(ValueHash&& _list);
21 ValueHash operator=(const ValueHash& _list);
22 ~ValueHash();
23 static cres_qresult<ValueHash> fromVariantMap(const QVariantMap& _map);
24 static cres_qresult<ValueHash> fromVariantHash(const QVariantHash& _map);
25 static cres_qresult<ValueHash> parseVariantMap(const QVariantMap& _value);
26 private:
27 template<typename _T_>
28 static cres_qresult<ValueHash> fromVariantHashMap(const _T_& _map);
29 public:
33 int size() const;
34
38 QStringList keys() const;
39
43 Value value(const QString& _key) const;
44
48 template<typename _T_>
49 cres_qresult<_T_> value(const QString& _key) const;
53 template<typename _T_>
54 cres_qresult<_T_> value(const QString& _key, const _T_& _default) const;
58 bool contains(const QString& _key) const;
62 bool contains(const QString& _key, const knowCore::Uri& _datatype) const;
66 template<typename _T_>
67 bool contains(const QString& _key) const;
71 cres_qresult<void> ensureContains(const QString& _key, const knowCore::Uri& _datatype) const;
75 template<typename _T_>
76 cres_qresult<void> ensureContains(const QString& _key) const;
81 template<typename _T_>
82 cres_qresult<QHash<QString, _T_>> hash() const;
91 template<typename _T_>
92 cres_qresult<QMap<QString, _T_>> map() const;
100 template<typename _T_>
101 cres_qresult<QList<_T_>> values() const;
105 QList<Value> values() const { return hash().values(); }
106
107 bool operator==(const ValueHash& _rhs) const;
108 bool operator!=(const ValueHash& _rhs) const;
109 bool operator==(const QHash<QString, Value>& _rhs) const;
110
111 cres_qresult<QByteArray> md5() const;
112 cres_qresult<QJsonValue> toJsonValue(const SerialisationContexts& _contexts) const;
113 static cres_qresult<ValueHash> fromJsonValue(const QJsonValue& _value,
114 const DeserialisationContexts& _contexts);
115 cres_qresult<QCborValue> toCborValue(const SerialisationContexts& _contexts) const;
116 static cres_qresult<ValueHash> fromCborValue(const QCborValue& _value,
117 const DeserialisationContexts& _contexts);
118 cres_qresult<QString> printable() const;
122 QVariantHash toVariantHash() const;
126 QVariantMap toVariantMap() const;
127 QVariant toVariant() const;
134 cres_qresult<void> checkContainsOnly(const Uri& _uri) const;
135 template<typename _T_>
136 cres_qresult<void> checkContainsOnly() const;
137
141 operator Value() const { return Value::fromValue(*this); }
142
146 template<typename _T_>
147 ValueHash& insert(const QString& _key, const _T_& _value)
148 {
149 return insert(_key, Value::fromValue(_value));
150 }
154 template<typename _T_, typename... _TOther_>
155 ValueHash& insert(const QString& _key, const _T_& _value, const QString& _key_n,
156 const _TOther_&... _other)
157 {
158 insert(_key, _value);
159 return insert(_key_n, _other...);
160 }
164 ValueHash& insert(const QString& _key, const knowCore::Value& _value);
168 cres_qresult<void> insert(const QString& _key, const QVariant& _value);
172 cres_qresult<void> insert(const QVariantHash& _value);
176 ValueHash& insert(const knowCore::ValueHash& _value);
180 cres_qresult<void> insert(const QVariantMap& _value);
184 cres_qresult<void> insert(const QJsonObject& _value);
188 ValueHash& remove(const QString& _key);
192 void clear();
193 private:
194 template<typename _T_>
195 cres_qresult<void> insertHashMap(const _T_& _map);
196 struct Private;
197 QSharedDataPointer<Private> d;
198 };
199
200 template<typename _T_, typename... _TOther_>
201 ValueHash::ValueHash(const QString& _key, const _T_& _t, const _TOther_&... _other) : ValueHash()
202 {
203 insert(_key, _t, _other...);
204 }
205
206 template<typename _T_>
207 bool ValueHash::contains(const QString& _key) const
208 {
210 }
211 template<typename _T_>
212 cres_qresult<void> ValueHash::ensureContains(const QString& _key) const
213 {
215 }
216
217 inline cres_qresult<ValueHash> ValueHash::fromVariantMap(const QVariantMap& _map)
218 {
219 return fromVariantHashMap(_map);
220 }
221 inline cres_qresult<ValueHash> ValueHash::fromVariantHash(const QVariantHash& _map)
222 {
223 return fromVariantHashMap(_map);
224 }
225
226 template<typename _T_>
227 inline cres_qresult<ValueHash> ValueHash::fromVariantHashMap(const _T_& _map)
228 {
229 ValueHash h;
230 cres_try(cres_ignore, h.insert(_map));
231 return cres_success(h);
232 }
233 template<typename _T_>
234 inline cres_qresult<_T_> ValueHash::value(const QString& _key) const
235 {
236 return value(_key).template value<_T_>();
237 }
238 template<typename _T_>
239 inline cres_qresult<_T_> ValueHash::value(const QString& _key, const _T_& _default) const
240 {
241 if(contains(_key))
242 {
243 return value<_T_>(_key);
244 }
245 else
246 {
247 return cres_success(_default);
248 }
249 }
250
251 template<typename _T_>
252 inline cres_qresult<QHash<QString, _T_>> ValueHash::hash() const
253 {
255 QHash<QString, Value> values_ = hash();
256 for(auto it = values_.begin(); it != values_.end(); ++it)
257 {
258 cres_try(_T_ value, it.value().value<_T_>());
259 values[it.key()] = value;
260 }
261 return cres_success(values);
262 }
263 template<typename _T_>
264 inline cres_qresult<QMap<QString, _T_>> ValueHash::map() const
265 {
267 QHash<QString, Value> values_ = hash();
268 for(auto it = values_.begin(); it != values_.end(); ++it)
269 {
270 cres_try(_T_ value, it.value().value<_T_>());
271 values[it.key()] = value;
272 }
273 return cres_success(values);
274 }
276 {
278 QHash<QString, Value> values_ = hash();
279 for(auto it = values_.begin(); it != values_.end(); ++it)
280 {
281 values[it.key()] = it.value();
282 }
283 return values;
284 }
285 template<typename _T_>
286 inline cres_qresult<void> ValueHash::checkContainsOnly() const
287 {
288 return checkContainsOnly(MetaTypeInformation<_T_>::uri());
289 }
290} // namespace knowCore
291
292KNOWCORE_CORE_DECLARE_FORMATTER_PRINTABLE(knowCore::ValueHash);
293
294KNOWCORE_DECLARE_FULL_METATYPE(knowCore, ValueHash);
Definition Forward.h:10
Definition Forward.h:12
Definition MetaType.h:126
Definition MetaType.h:66
Definition MetaType.h:159
Definition Uri.h:15
Definition ValueHash.h:13
cres_qresult< QList< _T_ > > values() const
ValueHash & remove(const QString &_key)
Definition ValueHash.cpp:265
QStringList keys() const
Definition ValueHash.cpp:52
int size() const
Definition ValueHash.cpp:50
void clear()
Definition ValueHash.cpp:281
Value value(const QString &_key) const
Definition ValueHash.cpp:54
ValueHash & insert(const QString &_key, const _T_ &_value)
Definition ValueHash.h:147
cres_qresult< QMap< QString, _T_ > > map() const
Definition ValueHash.h:264
QVariantHash toVariantHash() const
Definition ValueHash.cpp:196
QList< Value > values() const
Definition ValueHash.h:105
cres_qresult< void > ensureContains(const QString &_key, const knowCore::Uri &_datatype) const
Definition ValueHash.cpp:71
QVariantMap toVariantMap() const
Definition ValueHash.cpp:207
ValueHash & insert(const QString &_key, const _T_ &_value, const QString &_key_n, const _TOther_ &... _other)
Definition ValueHash.h:155
bool contains(const QString &_key) const
Definition ValueHash.cpp:56
cres_qresult< QHash< QString, _T_ > > hash() const
Definition ValueHash.h:252
Definition Value.h:21
static Value fromValue(const _T_ &_value)
Definition Value.h:241
cres_qresult< _T_ > value(TypeCheckingMode _conversion=TypeCheckingMode::Safe) const
Definition Value.h:353