Skip to content

Commit 4aeae14

Browse files
committed
Serialize19 use indexed tuple access
* allow serialize tuples with multiples of same type
1 parent 6b461f0 commit 4aeae14

4 files changed

Lines changed: 36 additions & 2 deletions

File tree

src/serialize19.lib/serialize19/serialize.Tuple.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
namespace serialize19 {
66

77
template<Archive A, class... Ts> void serialize(A& a, tuple19::Tuple<Ts...>& tuple) {
8+
using meta19::nullptr_to;
89
using meta19::type;
9-
(serialize(a, tuple.amendOf(type<Ts>)), ...);
10+
[&]<size_t... Is>(std::index_sequence<Is...>*) {
11+
(serialize(a, tuple.template amendAt<Is>()), ...);
12+
}(nullptr_to<std::make_index_sequence<sizeof...(Ts)>>);
1013
}
1114

1215
} // namespace serialize19

src/serialize19.lib/serialize19/serialize.Tuple.test.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,16 @@ TEST(serialize, Tuple) {
2121

2222
EXPECT_EQ(output, input);
2323
}
24+
25+
TEST(serialize, Tuple_ints) {
26+
using T = Tuple<int, int, int>;
27+
auto input = T{23, 42, 13};
28+
29+
auto buffer = dynamicWrite(input);
30+
31+
auto reader = ReadArchive{buffer.slice()};
32+
auto output = T{};
33+
serialize(reader, output);
34+
35+
EXPECT_EQ(output, input);
36+
}
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
#pragma once
22
#include "serialize.h"
33

4+
#include <meta19/Type.h>
45
#include <tuple>
56

67
namespace serialize19 {
78

89
template<Archive A, class... Ts> void serialize(A& a, std::tuple<Ts...>& tuple) {
9-
(serialize(a, std::get<Ts>(tuple)), ...);
10+
using meta19::nullptr_to;
11+
using meta19::type;
12+
[&]<size_t... Is>(std::index_sequence<Is...>*) {
13+
(serialize(a, std::get<Is>(tuple)), ...);
14+
}(nullptr_to<std::make_index_sequence<sizeof...(Ts)>>);
1015
}
1116

1217
} // namespace serialize19

src/serialize19.lib/serialize19/serialize.std_tuple.test.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,16 @@ TEST(serialize, std_tuple) {
1919

2020
EXPECT_EQ(output, input);
2121
}
22+
23+
TEST(serialize, std_tuple_ints) {
24+
using T = std::tuple<int, int, int>;
25+
auto input = T{23, 13, 42};
26+
27+
auto buffer = dynamicWrite(input);
28+
29+
auto reader = ReadArchive{buffer.slice()};
30+
auto output = T{};
31+
serialize(reader, output);
32+
33+
EXPECT_EQ(output, input);
34+
}

0 commit comments

Comments
 (0)