Skip to content

Commit 35d45c2

Browse files
committed
folly::sorted_vector_map: Add key-capture support
1 parent fb66f3e commit 35d45c2

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

test/integration/capture_keys.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,3 +329,12 @@ class FixedAllocator {
329329
top_level = true
330330
'''
331331
expect_json_v2 = '[{"members": [{"data": 1}]}]'
332+
[cases.folly_sorted_vector_map]
333+
oid_skip = "Requires TreeBuilderV2"
334+
param_types = ["const folly::sorted_vector_map<int, int>&"]
335+
setup = "return {{{1,2}}};"
336+
config_suffix = '''
337+
[[codegen.capture_keys]]
338+
top_level = true
339+
'''
340+
expect_json_v2 = '[{"members": [{"data": 1}]}]'

types/map_seq_type.toml

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ traversal_func = '''
7474
7575
for (const auto& kv : container) {
7676
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) {
7879
return OIInternal::getSizeType<DB>(kv.first, ret);
7980
});
8081
return OIInternal::getSizeType<DB>(kv.second, next);
@@ -95,24 +96,32 @@ el.container_stats.emplace(result::Element::ContainerStats{ .capacity = std::get
9596
'''
9697

9798
[[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+
'''
102110
func = '''
103111
using element_type = std::pair<T0, T1>;
104112
105113
static constexpr std::array<inst::Field, 2> entryFields{
106114
make_field<DB, T0>("key"),
107115
make_field<DB, T1>("value"),
108116
};
117+
static constexpr auto processors = maybeCaptureKeysProcessor<captureKeys, DB, T0>();
109118
static constexpr auto entry = inst::Field {
110119
sizeof(element_type),
111120
sizeof(element_type) - sizeof(T0) - sizeof(T1),
112121
"[]",
113122
std::array<std::string_view, 0>{},
114123
entryFields,
115-
std::array<inst::ProcessorInst, 0>{},
124+
processors,
116125
};
117126
118127
auto list = std::get<ParsedData::List>(d.val);

0 commit comments

Comments
 (0)