@@ -385,6 +385,44 @@ template <> class SPSSerializationTraits<SPSSequence<char>, span<const char>> {
385
385
}
386
386
};
387
387
388
+ // / SPSTuple serialization for std::tuple.
389
+ template <typename ... SPSTagTs, typename ... Ts>
390
+ class SPSSerializationTraits <SPSTuple<SPSTagTs...>, std::tuple<Ts...>> {
391
+ private:
392
+ using TupleArgList = typename SPSTuple<SPSTagTs...>::AsArgList;
393
+ using ArgIndices = std::make_index_sequence<sizeof ...(Ts)>;
394
+
395
+ template <std::size_t ... I>
396
+ static size_t size (const std::tuple<Ts...> &T, std::index_sequence<I...>) {
397
+ return TupleArgList::size (std::get<I>(T)...);
398
+ }
399
+
400
+ template <std::size_t ... I>
401
+ static bool serialize (SPSOutputBuffer &OB, const std::tuple<Ts...> &T,
402
+ std::index_sequence<I...>) {
403
+ return TupleArgList::serialize (OB, std::get<I>(T)...);
404
+ }
405
+
406
+ template <std::size_t ... I>
407
+ static bool deserialize (SPSInputBuffer &IB, std::tuple<Ts...> &T,
408
+ std::index_sequence<I...>) {
409
+ return TupleArgList::deserialize (IB, std::get<I>(T)...);
410
+ }
411
+
412
+ public:
413
+ static size_t size (const std::tuple<Ts...> &T) {
414
+ return size (T, ArgIndices{});
415
+ }
416
+
417
+ static bool serialize (SPSOutputBuffer &OB, const std::tuple<Ts...> &T) {
418
+ return serialize (OB, T, ArgIndices{});
419
+ }
420
+
421
+ static bool deserialize (SPSInputBuffer &IB, std::tuple<Ts...> &T) {
422
+ return deserialize (IB, T, ArgIndices{});
423
+ }
424
+ };
425
+
388
426
// / SPSTuple serialization for std::pair.
389
427
template <typename SPSTagT1, typename SPSTagT2, typename T1, typename T2>
390
428
class SPSSerializationTraits <SPSTuple<SPSTagT1, SPSTagT2>, std::pair<T1, T2>> {
0 commit comments