6 #ifndef SWIFT_MISC_MIXIN_MIXINHASH_H
7 #define SWIFT_MISC_MIXIN_MIXINHASH_H
10 #include <initializer_list>
11 #include <type_traits>
14 #include <QDBusArgument>
17 #include <QJsonObject>
19 #include <QJsonValueRef>
46 template <
class Derived>
51 friend size_t qHash(
const Derived &value,
size_t seed = 0)
57 static size_t hashImpl(
const Derived &value);
60 static size_t baseHash(
const T *base)
64 static size_t baseHash(
const void *);
65 static size_t baseHash(
const CEmpty *);
68 template <
class Derived>
69 size_t HashByMetaClass<Derived>::hashImpl(
const Derived &value)
71 size_t hash = baseHash(
static_cast<const TBaseOfT<Derived> *
>(&value));
72 introspect<Derived>().forEachMember([&](
auto member) {
73 if constexpr (!decltype(member)::has(MetaFlags<DisabledForHashing>()))
75 hash ^=
qHash(member.in(value));
81 template <
class Derived>
82 size_t HashByMetaClass<Derived>::baseHash(
const void *)
87 template <
class Derived>
88 size_t HashByMetaClass<Derived>::baseHash(
const CEmpty *)
Default base class for CValueObject.
Free functions in swift::misc.