@@ -244,14 +244,14 @@ const Out& AsBase(const In& x)
244
244
// Templates for serializing to anything that looks like a stream,
245
245
// i.e. anything that supports .read(std::span<std::byte>) and .write(std::span<const std::byte>)
246
246
//
247
- // clang-format off
248
247
249
248
// Typically int8_t and char are distinct types, but some systems may define int8_t
250
249
// in terms of char. Forbid serialization of char in the typical case, but allow it if
251
250
// it's the only way to describe an int8_t.
252
251
template<class T>
253
252
concept CharNotInt8 = std::same_as<T, char> && !std::same_as<T, int8_t>;
254
253
254
+ // clang-format off
255
255
template <typename Stream, CharNotInt8 V> void Serialize (Stream&, V) = delete; // char serialization forbidden. Use uint8_t or int8_t
256
256
template <typename Stream> void Serialize (Stream& s, std::byte a) { ser_writedata8 (s, uint8_t (a)); }
257
257
template <typename Stream> inline void Serialize (Stream& s, int8_t a ) { ser_writedata8 (s, a); }
@@ -262,10 +262,11 @@ template<typename Stream> inline void Serialize(Stream& s, int32_t a ) { ser_wri
262
262
template <typename Stream> inline void Serialize (Stream& s, uint32_t a) { ser_writedata32 (s, a); }
263
263
template <typename Stream> inline void Serialize (Stream& s, int64_t a ) { ser_writedata64 (s, a); }
264
264
template <typename Stream> inline void Serialize (Stream& s, uint64_t a) { ser_writedata64 (s, a); }
265
- template <typename Stream, BasicByte B, int N> void Serialize (Stream& s, const B (&a)[N]) { s.write (MakeByteSpan (a)); }
266
- template <typename Stream, BasicByte B, std::size_t N> void Serialize (Stream& s, const std::array<B, N>& a) { s.write (MakeByteSpan (a)); }
267
- template <typename Stream, BasicByte B, std::size_t N> void Serialize (Stream& s, std::span<B, N> span) { s.write (std::as_bytes (span)); }
268
- template <typename Stream, BasicByte B> void Serialize (Stream& s, std::span<B> span) { s.write (std::as_bytes (span)); }
265
+
266
+ template <typename Stream, BasicByte B, size_t N> void Serialize (Stream& s, const B (&a)[N]) { s.write (MakeByteSpan (a)); }
267
+ template <typename Stream, BasicByte B, size_t N> void Serialize (Stream& s, const std::array<B, N>& a) { s.write (MakeByteSpan (a)); }
268
+ template <typename Stream, BasicByte B, size_t N> void Serialize (Stream& s, std::span<B, N> span) { s.write (std::as_bytes (span)); }
269
+ template <typename Stream, BasicByte B> void Serialize (Stream& s, std::span<B> span) { s.write (std::as_bytes (span)); }
269
270
270
271
template <typename Stream, CharNotInt8 V> void Unserialize (Stream&, V) = delete; // char serialization forbidden. Use uint8_t or int8_t
271
272
template <typename Stream> void Unserialize (Stream& s, std::byte& a) { a = std::byte{ser_readdata8 (s)}; }
@@ -277,10 +278,11 @@ template<typename Stream> inline void Unserialize(Stream& s, int32_t& a ) { a =
277
278
template <typename Stream> inline void Unserialize (Stream& s, uint32_t & a) { a = ser_readdata32 (s); }
278
279
template <typename Stream> inline void Unserialize (Stream& s, int64_t & a ) { a = ser_readdata64 (s); }
279
280
template <typename Stream> inline void Unserialize (Stream& s, uint64_t & a) { a = ser_readdata64 (s); }
280
- template <typename Stream, BasicByte B, int N> void Unserialize (Stream& s, B (&a)[N]) { s.read (MakeWritableByteSpan (a)); }
281
- template <typename Stream, BasicByte B, std::size_t N> void Unserialize (Stream& s, std::array<B, N>& a) { s.read (MakeWritableByteSpan (a)); }
282
- template <typename Stream, BasicByte B, std::size_t N> void Unserialize (Stream& s, std::span<B, N> span) { s.read (std::as_writable_bytes (span)); }
283
- template <typename Stream, BasicByte B> void Unserialize (Stream& s, std::span<B> span) { s.read (std::as_writable_bytes (span)); }
281
+
282
+ template <typename Stream, BasicByte B, size_t N> void Unserialize (Stream& s, B (&a)[N]) { s.read (MakeWritableByteSpan (a)); }
283
+ template <typename Stream, BasicByte B, size_t N> void Unserialize (Stream& s, std::array<B, N>& a) { s.read (MakeWritableByteSpan (a)); }
284
+ template <typename Stream, BasicByte B, size_t N> void Unserialize (Stream& s, std::span<B, N> span) { s.read (std::as_writable_bytes (span)); }
285
+ template <typename Stream, BasicByte B> void Unserialize (Stream& s, std::span<B> span) { s.read (std::as_writable_bytes (span)); }
284
286
285
287
template <typename Stream> inline void Serialize (Stream& s, bool a) { uint8_t f = a; ser_writedata8 (s, f); }
286
288
template <typename Stream> inline void Unserialize (Stream& s, bool & a) { uint8_t f = ser_readdata8 (s); a = f; }
0 commit comments