QFlags: befriend the QDataStream serialization operators

We can't define them as hidden friends in qflags.h because QDataStream
is only forward-declared at this point. But we can simplify their
implementation in qdatastream.h. This is also done in preparation for
the 64-bit QFlags.

Change-Id: Ia8c5859422f5737a3539fffd9da284bc9a0f5240
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This commit is contained in:
Thiago Macieira 2024-08-12 15:18:44 -07:00
parent 0c707c6ebe
commit 729c0960b8
2 changed files with 4 additions and 7 deletions

View File

@ -172,6 +172,8 @@ private:
return (it == end ? Int(0) : (Int(*it) | initializer_list_helper(it + 1, end)));
}
template <typename E> friend QDataStream &operator<<(QDataStream &, QFlags<E>);
template <typename E> friend QDataStream &operator>>(QDataStream &, QFlags<E> &);
Int i;
};

View File

@ -516,16 +516,11 @@ inline QDataStream &QDataStream::operator<<(quint64 i)
template <typename Enum>
inline QDataStream &operator<<(QDataStream &s, QFlags<Enum> e)
{ return s << typename QFlags<Enum>::Int(e); }
{ return s << e.i; }
template <typename Enum>
inline QDataStream &operator>>(QDataStream &s, QFlags<Enum> &e)
{
typename QFlags<Enum>::Int i;
s >> i;
e = QFlag(i);
return s;
}
{ return s >> e.i; }
template <typename T>
typename std::enable_if_t<std::is_enum<T>::value, QDataStream &>