6 #ifndef SWIFT_MISC_MIXIN_MIXINDATASTREAM_H
7 #define SWIFT_MISC_MIXIN_MIXINDATASTREAM_H
26 template <
class Derived>
31 friend QDataStream &
operator<<(QDataStream &stream,
const Derived &value)
33 value.marshalToDataStream(stream);
38 friend QDataStream &
operator>>(QDataStream &stream, Derived &value)
40 value.unmarshalFromDataStream(stream);
50 template <
class Derived>
61 const Derived *derived()
const;
65 static void baseMarshal(
const T *base, QDataStream &stream);
67 static void baseUnmarshal(T *base, QDataStream &stream);
68 static void baseMarshal(
const void *, QDataStream &);
69 static void baseUnmarshal(
void *, QDataStream &);
70 static void baseMarshal(
const CEmpty *, QDataStream &);
71 static void baseUnmarshal(
CEmpty *, QDataStream &);
74 template <
class Derived>
78 introspect<Derived>().forEachMember([&,
this](
auto member) {
81 stream << member.in(*this->derived());
86 template <
class Derived>
90 introspect<Derived>().forEachMember([&,
this](
auto member) {
93 stream >> member.in(*this->derived());
98 template <
class Derived>
101 return static_cast<const Derived *
>(
this);
104 template <
class Derived>
105 Derived *DataStreamByMetaClass<Derived>::derived()
107 return static_cast<Derived *
>(
this);
110 template <
class Derived>
111 template <
typename T>
112 void DataStreamByMetaClass<Derived>::baseMarshal(
const T *base, QDataStream &stream)
117 template <
class Derived>
118 template <
typename T>
119 void DataStreamByMetaClass<Derived>::baseUnmarshal(T *base, QDataStream &stream)
121 base->unmarshalFromDataStream(stream);
124 template <
class Derived>
125 void DataStreamByMetaClass<Derived>::baseMarshal(
const void *, QDataStream &)
128 template <
class Derived>
129 void DataStreamByMetaClass<Derived>::baseUnmarshal(
void *, QDataStream &)
132 template <
class Derived>
133 void DataStreamByMetaClass<Derived>::baseMarshal(
const CEmpty *, QDataStream &)
136 template <
class Derived>
137 void DataStreamByMetaClass<Derived>::baseUnmarshal(CEmpty *, QDataStream &)
144 #define SWIFT_MISC_DECLARE_USING_MIXIN_DATASTREAM(DERIVED) \
145 using ::swift::misc::mixin::DataStreamByMetaClass<DERIVED>::marshalToDataStream; \
146 using ::swift::misc::mixin::DataStreamByMetaClass<DERIVED>::unmarshalFromDataStream;
Default base class for CValueObject.
CRTP class template to generate non-member QDataStream streaming operators.
friend QDataStream & operator>>(QDataStream &stream, Derived &value)
Unmarshal a value from a QDataStream.
friend QDataStream & operator<<(QDataStream &stream, const Derived &value)
Marshal a value to a QDataStream.
Free functions in swift::misc.
typename TBaseOf< T >::type TBaseOfT
Alias for typename TBaseOf<T>::type.