25 FromByteArray = 1 << 6,
27 FromValueList = 1 << 8,
28 DebugStreamOperator = 1 << 9,
33 enum class ComparisonOperator
40 GeoIntersects = 1 << 6,
45 enum class ArithmeticOperator
52 Q_DECLARE_FLAGS(ComparisonOperators, ComparisonOperator)
53 enum class TypeCheckingMode
65 template<
typename _T_>
69 template<
typename _T_>
73 template<
typename _T_>
79 static Uri uri(
int _type);
80 static int type(
const Uri& _uri);
81 static bool isNumericType(
const Uri& _uri);
91 TypeCheckingMode _checking = TypeCheckingMode::Safe);
139 template<
typename _T_>
148 QExplicitlySharedDataPointer<Private> d;
172 template<
typename _T_>
181 QExplicitlySharedDataPointer<Private> d;
189 inline static const SerialisationContexts& defaultSerialisationContext()
191 static SerialisationContexts contexts;
213 virtual void* allocate()
const = 0;
214 virtual void* duplicate(
const void*)
const = 0;
215 virtual void release(
void* _value)
const = 0;
216 virtual bool compareEquals(
const void* _lhs,
const void* _rhs)
const = 0;
220 virtual cres_qresult<QByteArray>
md5(
const void* _value)
const = 0;
230 virtual cres_qresult<void>
fromJsonValue(
void* _value,
const QJsonValue& _json_value,
242 virtual cres_qresult<void>
fromCborValue(
void* _value,
const QCborValue& _cbor_value,
248 virtual cres_qresult<QString>
printable(
const void* _value)
const = 0;
258 virtual cres_qresult<void>
fromRdfLiteral(
void* _value,
const QString& _serialised,
269 virtual cres_qresult<void> convert(
const void* _from,
void* _to)
const = 0;
275 virtual ComparisonOperator comparisonOperator()
const = 0;
278 virtual cres_qresult<bool> compare(
const void* _left,
const void* _right)
const = 0;
284 virtual ArithmeticOperator arithmeticOperator()
const = 0;
287 virtual cres_qresult<knowCore::Value> compute(
const void* _left,
const void* _right)
const = 0;
292 template<
typename _T_>
293 void registerMetaType();
295 void registerMetaTypeAliases(
const QList<Uri>& _aliases,
const Uri& _to);
297 template<
typename _TFrom_,
typename _TTo_>
299 registerConverter(TypeCheckingMode _conversionMode,
300 const std::function<cres_qresult<void>(
const _TFrom_*, _TTo_*)>& _converter);
301 template<
typename _TFrom_,
typename _TTo_>
302 void registerConverter();
303 template<ComparisonOperator _operator_,
typename _TLeft_,
typename _TRight_>
304 void registerComparator(
305 const std::function<cres_qresult<bool>(
const _TLeft_&,
const _TRight_&)>& _comparator);
306 template<ComparisonOperator _operator_,
typename _TLeft_,
typename _TRight_>
307 void registerComparator();
308 template<ArithmeticOperator _operator_,
typename _TLeft_,
typename _TRight_>
309 void registerArithmeticOperator();
311 template<
typename _T_>
312 void registerNumericType();
316 template<
typename _T_,
bool _has_converter_>
317 struct RegisterFromListConverter;
318 template<
typename _T_,
bool _has_converter_>
319 struct RegisterToListConverter;
324 template<
typename _T_>
326 template<
typename _T_>
327 friend void registerMetaType();
328 template<
typename _TTo_,
typename _TFrom_>
329 friend void registerConverter(TypeCheckingMode _mode,
330 const std::function<_TTo_(
const _TFrom_&)>& _converter);
331 template<
typename _TFrom_,
typename _TTo_>
332 friend void registerConverter();
333 template<
typename _T_,
bool _has_converter_>
335 template<
typename _T_,
bool _has_converter_>
337 template<ComparisonOperator _operator_,
typename _TLeft_,
typename _TRight_>
338 friend void registerComparator(
339 const std::function<cres_qresult<bool>(
const _TLeft_&,
const _TRight_&)>& _comparator);
340 template<ComparisonOperator _operator_,
typename _TLeft_,
typename _TRight_>
341 void friend registerComparator();
342 friend void registerMetaTypeAliases(
const QList<Uri>& _aliases,
const Uri& _to);
343 template<
typename _T_>
344 friend void registerNumericType();
345 template<ArithmeticOperator _operator_,
typename _TLeft_,
typename _TRight_>
346 friend void registerArithmeticOperator();
349 static void registerConverter(TypeCheckingMode _conversionMode,
354 TypeCheckingMode _conversion = TypeCheckingMode::Safe);
355 static void registerMetaTypeAliases(
const QList<Uri>& _aliases,
const Uri& _to);
360 template<
typename _T_,
class _Enabled_>
365#define __KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(__TYPE__, __DEFINITION__) \
369 class HasMetaTypeInformation<__TYPE__> : public std::true_type \
373 class MetaTypeInformation<__TYPE__> \
376 MetaTypeInformation(); \
377 static knowCore::Uri uri(); \
379 static QList<knowCore::Uri> aliases() { return knowCore::MetaTypes::aliases(uri()); } \
380 static bool isNumericType() { return MetaTypes::isNumericType(uri()); } \
381 template<typename _TOther_> \
382 static bool canConvertTo() \
384 return knowCore::MetaTypeRegistry::canConvert(uri(), \
385 MetaTypeInformation<_TOther_>::uri()); \
387 template<typename _TOther_> \
388 static bool canConvertFrom() \
390 return knowCore::MetaTypeRegistry::canConvert(MetaTypeInformation<_TOther_>::uri(), \
393 inline static int id() { return s_instance.m_id; } \
395 void init_knowCoreMetaType(); \
397 static MetaTypeInformation<__TYPE__> s_instance; \
401#define __KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS_DEFINITION(__TYPE__) \
402 static AbstractMetaTypeDefinition* definition(); \
403 inline static cres_qresult<QByteArray> md5(const __TYPE__& _value) \
405 return definition()->md5(&_value); \
407 inline static cres_qresult<QJsonValue> toJsonValue(const __TYPE__& _value, \
408 const SerialisationContexts& _contexts \
409 = defaultSerialisationContext()) \
411 return definition()->toJsonValue(&_value, _contexts); \
413 inline static cres_qresult<__TYPE__> fromJsonValue(const QJsonValue& _json_value, \
414 const DeserialisationContexts& _contexts \
415 = defaultDeserialisationContext()) \
418 cres_try(cres_ignore, definition()->fromJsonValue(&r, _json_value, _contexts)); \
419 return cres_success(r); \
421 inline static cres_qresult<QCborValue> toCborValue(const __TYPE__& _value, \
422 const SerialisationContexts& _contexts \
423 = defaultSerialisationContext()) \
425 return definition()->toCborValue(&_value, _contexts); \
427 inline static cres_qresult<__TYPE__> fromCborValue(const QCborValue& _cbor_value, \
428 const DeserialisationContexts& _contexts \
429 = defaultDeserialisationContext()) \
432 cres_try(cres_ignore, definition()->fromCborValue(&r, _cbor_value, _contexts)); \
433 return cres_success(r); \
435 inline static cres_qresult<QString> printable(const __TYPE__& _value) \
437 return definition()->printable(&_value); \
439 inline static cres_qresult<QString> toRdfLiteral(const __TYPE__& _value, \
440 const SerialisationContexts& _contexts \
441 = defaultSerialisationContext()) \
443 return definition()->toRdfLiteral(&_value, _contexts); \
445 inline static cres_qresult<__TYPE__> fromRdfLiteral(const QString& _serialised, \
446 const DeserialisationContexts& _contexts \
447 = defaultDeserialisationContext()) \
450 cres_try(cres_ignore, definition()->fromRdfLiteral(&r, _serialised, _contexts)); \
451 return cres_success(r); \
454#define KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(__TYPE__) \
455 __KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS( \
456 __TYPE__, __KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS_DEFINITION(__TYPE__))
458#define KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS_NO_DEFINITION(__TYPE__) \
459 __KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(__TYPE__, )
461#define KNOWCORE_DECLARE_KNOWCORE_METATYPE_NO_DEFINITION(_NS_, _TYPE_) \
462 KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS_NO_DEFINITION(_NS_::_TYPE_) \
465 using _TYPE_##MetaTypeInformation = knowCore::MetaTypeInformation<_TYPE_>; \
468#define KNOWCORE_DECLARE_KNOWCORE_METATYPE(_NS_, _TYPE_) \
469 KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(_NS_::_TYPE_) \
472 using _TYPE_##MetaTypeInformation = knowCore::MetaTypeInformation<_TYPE_>; \
475#define KNOWCORE_DECLARE_FULL_METATYPE(_NS_, _TYPE_) \
476 Q_DECLARE_METATYPE(_NS_::_TYPE_) \
477 KNOWCORE_DECLARE_KNOWCORE_METATYPE(_NS_, _TYPE_)
479#define KNOWCORE_DECLARE_FULL_METATYPE_NO_DEFINITION(_NS_, _TYPE_) \
480 Q_DECLARE_METATYPE(_NS_::_TYPE_) \
481 KNOWCORE_DECLARE_KNOWCORE_METATYPE_NO_DEFINITION(_NS_, _TYPE_)
483KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(QString)
484KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(
QStringList)
485KNOWCORE_DECLARE_KNOWCORE_METATYPE_KLASS(QByteArray)
487KNOWCORE_DECLARE_KNOWCORE_METATYPE(knowCore,
490clog_format_declare_enum_formatter(knowCore::ComparisonOperator, AlmostEqual, Equal, Inferior,
491 GeoOverlaps, GeoIntersects, GeoWithin, GeoContains, GeoTouches,
493clog_format_declare_enum_formatter(knowCore::ArithmeticOperator, Addition, Substraction,
494 Multiplication, Division);
Definition MetaType.h:281
Definition MetaType.h:102
Definition MetaType.h:112
Definition MetaTypeImplementation.h:380
Definition MetaType.h:272
Definition MetaType.h:264
Definition MetaType.h:126
void addContext(const knowCore::Uri &_uri, AbstractDeserialisationContext *_context)
Definition MetaType.cpp:86
cres_qresult< AbstractDeserialisationContext * > getContext(const knowCore::Uri &_uri) const
Definition MetaType.cpp:74
Definition MetaType.h:159
cres_qresult< AbstractSerialisationContext * > getContext(const knowCore::Uri &_uri) const
Definition MetaType.cpp:111
void addContext(const knowCore::Uri &_uri, AbstractSerialisationContext *_context)
Definition MetaType.cpp:123
Definition MetaType.cpp:56
Definition MetaType.cpp:93
Definition MetaTypeImplementation.h:844
Definition MetaTypeImplementation.h:860