@@ -74,7 +74,8 @@ traversal_func = '''
74
74
75
75
for (const auto& kv : container) {
76
76
tail = tail.delegate([&kv](auto ret) {
77
- auto next = ret.delegate([&kv](typename TypeHandler<DB, T0>::type ret) {
77
+ auto start = maybeCaptureKey<captureKeys, DB, T0>(kv.first, ret);
78
+ auto next = start.delegate([&kv](typename TypeHandler<DB, T0>::type ret) {
78
79
return OIInternal::getSizeType<DB>(kv.first, ret);
79
80
});
80
81
return OIInternal::getSizeType<DB>(kv.second, next);
@@ -95,24 +96,32 @@ el.container_stats.emplace(result::Element::ContainerStats{ .capacity = std::get
95
96
'''
96
97
97
98
[[codegen .processor ]]
98
- type = ''' types::st::List<DB, types::st::Pair<DB,
99
- typename TypeHandler<DB, T0>::type,
100
- typename TypeHandler<DB, T1>::type
101
- >>'''
99
+ type = '''
100
+ std::conditional_t<captureKeys,
101
+ types::st::List<DB, types::st::Pair<DB,
102
+ typename CaptureKeyHandler<DB, T0>::type,
103
+ types::st::Pair<DB,
104
+ typename TypeHandler<DB, T0>::type,
105
+ typename TypeHandler<DB, T1>::type>>>,
106
+ types::st::List<DB, types::st::Pair<DB,
107
+ typename TypeHandler<DB, T0>::type,
108
+ typename TypeHandler<DB, T1>::type>>>
109
+ '''
102
110
func = '''
103
111
using element_type = std::pair<T0, T1>;
104
112
105
113
static constexpr std::array<inst::Field, 2> entryFields{
106
114
make_field<DB, T0>("key"),
107
115
make_field<DB, T1>("value"),
108
116
};
117
+ static constexpr auto processors = maybeCaptureKeysProcessor<captureKeys, DB, T0>();
109
118
static constexpr auto entry = inst::Field {
110
119
sizeof(element_type),
111
120
sizeof(element_type) - sizeof(T0) - sizeof(T1),
112
121
"[]",
113
122
std::array<std::string_view, 0>{},
114
123
entryFields,
115
- std::array<inst::ProcessorInst, 0>{} ,
124
+ processors ,
116
125
};
117
126
118
127
auto list = std::get<ParsedData::List>(d.val);
0 commit comments