@@ -1103,6 +1103,10 @@ size_t GetSerializeSize(const T& t)
1103
1103
return (SizeComputer () << t).size ();
1104
1104
}
1105
1105
1106
+ // ! Check if type contains a stream by seeing if has a GetStream() method.
1107
+ template <typename T>
1108
+ concept ContainsStream = requires (T t) { t.GetStream (); };
1109
+
1106
1110
/* * Wrapper that overrides the GetParams() function of a stream. */
1107
1111
template <typename SubStream, typename Params>
1108
1112
class ParamsStream
@@ -1126,11 +1130,11 @@ class ParamsStream
1126
1130
1127
1131
template <typename U> ParamsStream& operator <<(const U& obj) { ::Serialize (*this , obj); return *this ; }
1128
1132
template <typename U> ParamsStream& operator >>(U&& obj) { ::Unserialize (*this , obj); return *this ; }
1129
- void write (Span<const std::byte> src) { m_substream .write (src); }
1130
- void read (Span<std::byte> dst) { m_substream .read (dst); }
1131
- void ignore (size_t num) { m_substream .ignore (num); }
1132
- bool eof () const { return m_substream .eof (); }
1133
- size_t size () const { return m_substream .size (); }
1133
+ void write (Span<const std::byte> src) { GetStream () .write (src); }
1134
+ void read (Span<std::byte> dst) { GetStream () .read (dst); }
1135
+ void ignore (size_t num) { GetStream () .ignore (num); }
1136
+ bool eof () const { return GetStream () .eof (); }
1137
+ size_t size () const { return GetStream () .size (); }
1134
1138
1135
1139
// ! Get reference to stream parameters.
1136
1140
template <typename P>
@@ -1142,6 +1146,24 @@ class ParamsStream
1142
1146
return m_substream.template GetParams <P>();
1143
1147
}
1144
1148
}
1149
+
1150
+ // ! Get reference to underlying stream.
1151
+ auto & GetStream ()
1152
+ {
1153
+ if constexpr (ContainsStream<SubStream>) {
1154
+ return m_substream.GetStream ();
1155
+ } else {
1156
+ return m_substream;
1157
+ }
1158
+ }
1159
+ const auto & GetStream () const
1160
+ {
1161
+ if constexpr (ContainsStream<SubStream>) {
1162
+ return m_substream.GetStream ();
1163
+ } else {
1164
+ return m_substream;
1165
+ }
1166
+ }
1145
1167
};
1146
1168
1147
1169
/* *
0 commit comments