9#include "ReturnValue.h"
22 FromByteArray = 1 << 6,
23 DebugStreamOperator = 1 << 7,
28 enum class ComparisonOperator
35 GeoIntersects = 1 << 6,
40 enum class ArithmeticOperator
42 Addition, Substraction, Division, Multiplication
44 Q_DECLARE_FLAGS(ComparisonOperators, ComparisonOperator)
45 enum class TypeCheckingMode
57 template<
typename _T_>
61 template<
typename _T_>
63 template<
typename _T_>
69 static Uri uri(
int _type);
70 static int type(
const Uri& _uri);
71 static bool isNumericType(
const Uri& _uri);
80 static bool canConvert(
const Uri& _from,
const Uri& _to, TypeCheckingMode _checking = TypeCheckingMode::Safe);
127 template<
typename _T_>
135 QExplicitlySharedDataPointer<Private> d;
158 template<
typename _T_>
166 QExplicitlySharedDataPointer<Private> d;
174 inline static const SerialisationContexts& defaultSerialisationContext()
176 static SerialisationContexts contexts;
197 virtual void* allocate()
const = 0;
198 virtual void* duplicate(
const void*)
const = 0;
199 virtual void release(
void* _value)
const = 0;
200 virtual bool compareEquals(
const void* _lhs,
const void* _rhs)
const = 0;
241 virtual ReturnVoid convert(
const void* _from,
void* _to)
const = 0;
247 virtual ComparisonOperator comparisonOperator()
const = 0;
250 virtual ReturnValue<bool> compare(
const void* _left,
const void* _right)
const = 0;
256 virtual ArithmeticOperator arithmeticOperator()
const = 0;
264 template<
typename _T_>
265 void registerMetaType();
267 void registerMetaTypeAliases(
const QList<Uri>& _aliases,
const Uri& _to);
269 template<
typename _TFrom_,
typename _TTo_>
270 void registerConverter(TypeCheckingMode _conversionMode,
const std::function<
ReturnVoid(
const _TFrom_*, _TTo_*)>& _converter);
271 template<
typename _TFrom_,
typename _TTo_>
272 void registerConverter();
273 template<ComparisonOperator _operator_,
typename _TLeft_,
typename _TRight_>
274 void registerComparator(
const std::function<
ReturnValue<bool>(
const _TLeft_&,
const _TRight_&)>& _comparator);
275 template<ComparisonOperator _operator_,
typename _TLeft_,
typename _TRight_>
276 void registerComparator();
277 template<ArithmeticOperator _operator_,
typename _TLeft_,
typename _TRight_>
278 void registerArithmeticOperator();
280 template<
typename _T_>
281 void registerNumericType();
285 template<
typename _T_>
287 template<
typename _T_>
288 friend void registerMetaType();
289 template<
typename _TTo_,
typename _TFrom_>
290 friend void registerConverter(TypeCheckingMode _mode,
const std::function<_TTo_(
const _TFrom_&)>& _converter);
291 template<
typename _TFrom_,
typename _TTo_>
292 friend void registerConverter();
293 template<ComparisonOperator _operator_,
typename _TLeft_,
typename _TRight_>
294 friend void registerComparator(
const std::function<
ReturnValue<bool>(
const _TLeft_&,
const _TRight_&)>& _comparator);
295 template<ComparisonOperator _operator_,
typename _TLeft_,
typename _TRight_>
296 void friend registerComparator();
297 friend void registerMetaTypeAliases(
const QList<Uri>& _aliases,
const Uri& _to);
298 template<
typename _T_>
299 friend void registerNumericType();
300 template<ArithmeticOperator _operator_,
typename _TLeft_,
typename _TRight_>
301 friend void registerArithmeticOperator();
307 static bool canConvert(
const knowCore::Uri& _from,
const knowCore::Uri& _to, TypeCheckingMode _conversion = TypeCheckingMode::Safe);
308 static void registerMetaTypeAliases(
const QList<Uri>& _aliases,
const Uri& _to);
313 template<
typename _T_,
class _Enabled_>
319#define __KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(__TYPE__, __DEFINITION__) \
323 class HasMetaTypeInformation<__TYPE__> : public std::true_type {}; \
325 class MetaTypeInformation<__TYPE__> { \
327 MetaTypeInformation(); \
328 static knowCore::Uri uri(); \
330 static QList<knowCore::Uri> aliases() \
332 return knowCore::MetaTypes::aliases(uri()); \
334 static bool isNumericType() \
336 return MetaTypes::isNumericType(uri()); \
338 template<typename _TOther_> \
339 static bool canConvertTo() \
341 return knowCore::MetaTypeRegistry::canConvert(uri(), \
342 MetaTypeInformation<_TOther_>::uri()); \
344 template<typename _TOther_> \
345 static bool canConvertFrom() \
347 return knowCore::MetaTypeRegistry::canConvert( \
348 MetaTypeInformation<_TOther_>::uri(), \
351 inline static int id() { return s_instance.m_id; } \
353 void init_knowCoreMetaType(); \
355 static MetaTypeInformation<__TYPE__> s_instance; \
359#define __KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS_DEFINITION(__TYPE__) \
360 static AbstractMetaTypeDefinition* definition(); \
361 inline static ReturnValue<QByteArray> md5(const __TYPE__& _value) \
362 { return definition()->md5(&_value); } \
363 inline static ReturnValue<QJsonValue> toJsonValue(const __TYPE__& _value, const SerialisationContexts& _contexts = defaultSerialisationContext()) \
364 { return definition()->toJsonValue(&_value, _contexts); } \
365 inline static ReturnValue<__TYPE__> fromJsonValue(const QJsonValue& _json_value, const DeserialisationContexts& _contexts = defaultDeserialisationContext()) \
368 KNOWCORE_RETURN_VALUE_TRY_VOID(definition()->fromJsonValue(&r, _json_value, _contexts)); \
369 return kCrvSuccess(r); \
371 inline static ReturnValue<QCborValue> toCborValue(const __TYPE__& _value, const SerialisationContexts& _contexts = defaultSerialisationContext()) \
372 { return definition()->toCborValue(&_value, _contexts); } \
373 inline static ReturnValue<__TYPE__> fromCborValue(const QCborValue& _cbor_value, const DeserialisationContexts& _contexts = defaultDeserialisationContext()) \
376 KNOWCORE_RETURN_VALUE_TRY_VOID(definition()->fromCborValue(&r, _cbor_value, _contexts)); \
377 return kCrvSuccess(r); \
379 inline static ReturnValue<QString> printable(const __TYPE__& _value) \
380 { return definition()->printable(&_value); } \
381 inline static ReturnValue<QString> toRdfLiteral(const __TYPE__& _value, const SerialisationContexts& _contexts = defaultSerialisationContext()) \
382 { return definition()->toRdfLiteral(&_value, _contexts); } \
383 inline static ReturnValue<__TYPE__> fromRdfLiteral(const QString& _serialised, const DeserialisationContexts& _contexts = defaultDeserialisationContext()) \
386 KNOWCORE_RETURN_VALUE_TRY_VOID(definition()->fromRdfLiteral(&r, _serialised, _contexts)); \
387 return kCrvSuccess(r); \
390#define KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(__TYPE__) \
391 __KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(__TYPE__, __KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS_DEFINITION(__TYPE__))
393#define KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS_NO_DEFINITION(__TYPE__) \
394 __KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(__TYPE__, )
396#define KNOWCORE_DECLARE_KNOWCORE_METATYPE_NO_DEFINITION(_NS_, _TYPE_) \
397 KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS_NO_DEFINITION(_NS_::_TYPE_) \
400 using _TYPE_ ## MetaTypeInformation = knowCore::MetaTypeInformation<_TYPE_>; \
403#define KNOWCORE_DECLARE_KNOWCORE_METATYPE(_NS_, _TYPE_) \
404 KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(_NS_::_TYPE_) \
407 using _TYPE_ ## MetaTypeInformation = knowCore::MetaTypeInformation<_TYPE_>; \
410#define KNOWCORE_DECLARE_FULL_METATYPE(_NS_, _TYPE_) \
411 Q_DECLARE_METATYPE(_NS_::_TYPE_) \
412 KNOWCORE_DECLARE_KNOWCORE_METATYPE(_NS_, _TYPE_)
414#define KNOWCORE_DECLARE_FULL_METATYPE_NO_DEFINITION(_NS_, _TYPE_) \
415 Q_DECLARE_METATYPE(_NS_::_TYPE_) \
416 KNOWCORE_DECLARE_KNOWCORE_METATYPE_NO_DEFINITION(_NS_, _TYPE_)
418KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(QString)
419KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(QStringList)
420KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(QByteArray)
422KNOWCORE_DECLARE_KNOWCORE_METATYPE(knowCore,
Uri)
423KNOWCORE_CORE_DECLARE_FORMATTER_ENUM(knowCore::ComparisonOperator, Equal, Inferior, GeoOverlaps, GeoIntersects, GeoWithin, GeoContains, GeoTouches, In)
424KNOWCORE_CORE_DECLARE_FORMATTER_ENUM(knowCore::ArithmeticOperator, Addition, Substraction, Multiplication, Division)
Definition MetaType.h:253
Definition MetaType.h:101
Definition MetaTypeImplementation.h:271
Definition MetaType.h:244
Definition MetaType.h:236
Definition MetaType.h:114
void addContext(const knowCore::Uri &_uri, AbstractDeserialisationContext *_context)
Definition MetaType.cpp:100
knowCore::ReturnValue< AbstractDeserialisationContext * > getContext(const knowCore::Uri &_uri) const
Definition MetaType.cpp:90
Definition ReturnValue.h:85
Definition ReturnValue.h:29
Definition MetaType.h:145
knowCore::ReturnValue< AbstractSerialisationContext * > getContext(const knowCore::Uri &_uri) const
Definition MetaType.cpp:132
void addContext(const knowCore::Uri &_uri, AbstractSerialisationContext *_context)
Definition MetaType.cpp:142
Definition MetaType.cpp:64
Definition MetaType.cpp:106