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 ValueHash(std::initializer_list<std::pair<QString, Value> >);
17 ValueHash(const QHash<QString, Value>& _value);
18 ValueHash(const ValueHash& _list);
19 ValueHash(ValueHash&& _list);
20 ValueHash operator=(const ValueHash& _list);
21 ~ValueHash();
22 static ReturnValue<ValueHash> fromVariantMap(const QVariantMap& _map);
23 static ReturnValue<ValueHash> fromVariantHash(const QVariantHash& _map);
24 private:
25 template<typename _T_>
26 static ReturnValue<ValueHash> fromVariantHashMap(const _T_& _map);
27 public:
31 int size() const;
32
36 QStringList keys() const;
37
41 Value value(const QString& _key) const;
42
46 template<typename _T_>
47 ReturnValue<_T_> value(const QString& _key) const;
51 template<typename _T_>
52 ReturnValue<_T_> value(const QString& _key, const _T_& _default) const;
56 bool contains(const QString& _key) const;
60 bool contains(const QString& _key, const knowCore::Uri& _datatype) const;
64 template<typename _T_>
65 bool contains(const QString& _key) const;
69 knowCore::ReturnVoid ensureContains(const QString& _key, const knowCore::Uri& _datatype) const;
73 template<typename _T_>
74 knowCore::ReturnVoid ensureContains(const QString& _key) const;
78 template<typename _T_>
87 template<typename _T_>
96 template<typename _T_>
101 QList<Value> values() const { return hash().values(); }
102
103 bool operator==(const ValueHash& _rhs) const;
104 bool operator!=(const ValueHash& _rhs) const;
105 bool operator==(const QHash<QString, Value>& _rhs) const;
106
107 ReturnValue<QByteArray> md5() const;
108 ReturnValue<QJsonValue> toJsonValue(const SerialisationContexts& _contexts) const;
109 static ReturnValue<ValueHash> fromJsonValue(const QJsonValue& _value, const DeserialisationContexts& _contexts);
110 ReturnValue<QCborValue> toCborValue(const SerialisationContexts& _contexts) const;
111 static ReturnValue<ValueHash> fromCborValue(const QCborValue& _value, const DeserialisationContexts& _contexts);
112 ReturnValue<QString> printable() const;
116 QVariantHash toVariantHash() const;
120 QVariantMap toVariantMap() const;
121 QVariant toVariant() const;
128 ReturnVoid checkContainsOnly(const Uri& _uri) const;
129 template<typename _T_>
130 ReturnVoid checkContainsOnly() const;
131
135 operator Value() const { return Value::fromValue(*this); }
136
140 template<typename _T_>
141 ValueHash& add(const QString& _key, const _T_& _value)
142 {
143 return add(_key, Value::fromValue(_value));
144 }
148 template<typename _T_, typename... _TOther_>
149 ValueHash& add(const QString& _key, const _T_& _value, const QString& _key_n, const _TOther_&... _other)
150 {
151 add(_key, _value);
152 return add(_key_n, _other...);
153 }
157 ValueHash& add(const QString& _key, const knowCore::Value& _value);
161 knowCore::ReturnVoid add(const QString& _key, const QVariant& _value);
165 knowCore::ReturnVoid add(const QVariantHash& _value);
169 ValueHash& add(const knowCore::ValueHash& _value);
173 knowCore::ReturnVoid add(const QVariantMap& _value);
177 knowCore::ReturnVoid add(const QJsonObject& _value);
181 ValueHash& remove(const QString& _key);
185 void clear();
186 private:
187 template<typename _T_>
188 knowCore::ReturnVoid addHashMap(const _T_& _map);
189 struct Private;
190 QSharedDataPointer<Private> d;
191 };
192
193 template<typename _T_>
194 bool ValueHash::contains(const QString& _key) const
195 {
197 }
198 template<typename _T_>
200 {
202 }
203
204 inline ReturnValue<ValueHash> ValueHash::fromVariantMap(const QVariantMap& _map)
205 {
206 return fromVariantHashMap(_map);
207 }
208 inline ReturnValue<ValueHash> ValueHash::fromVariantHash(const QVariantHash& _map)
209 {
210 return fromVariantHashMap(_map);
211 }
212
213 template<typename _T_>
214 inline ReturnValue<ValueHash> ValueHash::fromVariantHashMap(const _T_& _map)
215 {
216 ValueHash h;
217 KNOWCORE_RETURN_VALUE_TRY_VOID(h.add(_map));
218 return kCrvSuccess(h);
219 }
220 template<typename _T_>
221 inline ReturnValue<_T_> ValueHash::value(const QString& _key) const
222 {
223 return value(_key).template value<_T_>();
224 }
225 template<typename _T_>
226 inline ReturnValue<_T_> ValueHash::value(const QString& _key, const _T_& _default) const
227 {
228 if(contains(_key))
229 {
230 return value<_T_>(_key);
231 } else {
232 return kCrvSuccess(_default);
233 }
234 }
235
236 template<typename _T_>
238 {
240 QHash<QString, Value> values_ = hash();
241 for(auto it = values_.begin(); it != values_.end(); ++it)
242 {
243 KNOWCORE_RETURN_VALUE_TRY(value, it.value().value<_T_>());
244 values[it.key()] = value;
245 }
246 return kCrvSuccess(values);
247 }
248 template<typename _T_>
250 {
252 QHash<QString, Value> values_ = hash();
253 for(auto it = values_.begin(); it != values_.end(); ++it)
254 {
255 KNOWCORE_RETURN_VALUE_TRY(value, it.value().value<_T_>());
256 values[it.key()] = value;
257 }
258 return kCrvSuccess(values);
259 }
261 {
263 QHash<QString, Value> values_ = hash();
264 for(auto it = values_.begin(); it != values_.end(); ++it)
265 {
266 values[it.key()] = it.value();
267 }
268 return values;
269 }
270 template<typename _T_>
271 inline ReturnVoid ValueHash::checkContainsOnly() const
272 {
273 return checkContainsOnly(MetaTypeInformation<_T_>::uri());
274 }
275}
276
277KNOWCORE_CORE_DECLARE_FORMATTER_PRINTABLE(knowCore::ValueHash)
278
279KNOWCORE_DECLARE_FULL_METATYPE(knowCore, ValueHash)
280
Definition Forward.h:8
Definition Forward.h:12
Definition Forward.h:10
Definition MetaType.h:114
Definition MetaType.h:58
Definition ReturnValue.h:85
Definition ReturnValue.h:29
Definition MetaType.h:145
Definition Uri.h:14
Definition ValueHash.h:13
ReturnValue< QHash< QString, _T_ > > hash() const
Definition ValueHash.h:237
ValueHash & remove(const QString &_key)
Definition ValueHash.cpp:281
QStringList keys() const
Definition ValueHash.cpp:52
int size() const
Definition ValueHash.cpp:47
void clear()
Definition ValueHash.cpp:297
Value value(const QString &_key) const
Definition ValueHash.cpp:57
knowCore::ReturnVoid ensureContains(const QString &_key, const knowCore::Uri &_datatype) const
Definition ValueHash.cpp:78
ReturnValue< QList< _T_ > > values() const
ValueHash & add(const QString &_key, const _T_ &_value)
Definition ValueHash.h:141
QVariantHash toVariantHash() const
Definition ValueHash.cpp:200
ReturnValue< QMap< QString, _T_ > > map() const
Definition ValueHash.h:249
QList< Value > values() const
Definition ValueHash.h:101
QVariantMap toVariantMap() const
Definition ValueHash.cpp:211
ValueHash & add(const QString &_key, const _T_ &_value, const QString &_key_n, const _TOther_ &... _other)
Definition ValueHash.h:149
bool contains(const QString &_key) const
Definition ValueHash.cpp:62
Definition Value.h:13
static Value fromValue(const _T_ &_value)
Definition Value.h:184
ReturnValue< _T_ > value(TypeCheckingMode _conversion=TypeCheckingMode::Safe) const
Definition Value.h:229