@@ -1103,6 +1103,10 @@ size_t GetSerializeSize(const T& t)
11031103 return (SizeComputer () << t).size ();
11041104}
11051105
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+
11061110/* * Wrapper that overrides the GetParams() function of a stream. */
11071111template <typename SubStream, typename Params>
11081112class ParamsStream
@@ -1126,11 +1130,11 @@ class ParamsStream
11261130
11271131 template <typename U> ParamsStream& operator <<(const U& obj) { ::Serialize (*this , obj); return *this ; }
11281132 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 (); }
11341138
11351139 // ! Get reference to stream parameters.
11361140 template <typename P>
@@ -1142,6 +1146,24 @@ class ParamsStream
11421146 return m_substream.template GetParams <P>();
11431147 }
11441148 }
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+ }
11451167};
11461168
11471169/* *
0 commit comments