Skip to content

Commit edb7bf5

Browse files
committed
Implement Container V2 for folly::sorted_vector_set
1 parent 8bad704 commit edb7bf5

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

test/integration/sorted_vector_set.toml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ definitions = '''
55

66
[cases]
77
[cases.no_ints]
8-
oil_skip = 'not implemented for treebuilder v2' # https://github.com/facebookexperimental/object-introspection/issues/320
98
param_types = ["const sorted_vector_set<int>&"]
109
setup = "return {};"
1110
expect_json = '''[{
@@ -21,9 +20,14 @@ definitions = '''
2120
"capacity": 0,
2221
"elementStaticSize": 4
2322
}]}]'''
23+
expect_json_v2 = '''[{
24+
"staticSize": 24,
25+
"exclusiveSize": 24,
26+
"length": 0,
27+
"capacity": 0
28+
}]'''
2429

2530
[cases.some_ints]
26-
oil_skip = 'not implemented for treebuilder v2' # https://github.com/facebookexperimental/object-introspection/issues/320
2731
param_types = ["const sorted_vector_set<int>&"]
2832
setup = '''
2933
sorted_vector_set<int> is;
@@ -49,3 +53,9 @@ definitions = '''
4953
"elementStaticSize": 4
5054
}]}]
5155
'''
56+
expect_json_v2 = '''[{
57+
"staticSize": 24,
58+
"exclusiveSize": 28,
59+
"length": 3,
60+
"capacity": 4
61+
}]'''

types/sorted_vec_set_type.toml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,41 @@ struct TypeHandler<DB, %1%<T0, T1, T2, T3, T4>> {
4747
}
4848
};
4949
"""
50+
51+
traversal_func = '''
52+
auto tail = returnArg.write((uintptr_t)&container)
53+
.write(container.capacity())
54+
.write(container.size());
55+
56+
for (const auto& el : container) {
57+
tail = tail.delegate([&el](auto ret) {
58+
return OIInternal::getSizeType<DB>(el, ret);
59+
});
60+
}
61+
62+
return tail.finish();
63+
'''
64+
65+
[[codegen.processor]]
66+
type = "types::st::VarInt<DB>"
67+
func = "el.pointer = std::get<ParsedData::VarInt>(d.val).value;"
68+
69+
[[codegen.processor]]
70+
type = "types::st::VarInt<DB>"
71+
func = '''
72+
el.container_stats.emplace(result::Element::ContainerStats{ .capacity = std::get<ParsedData::VarInt>(d.val).value });
73+
'''
74+
75+
[[codegen.processor]]
76+
type = "types::st::List<DB, typename TypeHandler<DB, T0>::type>"
77+
func = """
78+
static constexpr auto childField = make_field<DB, T0>("[]");
79+
80+
auto list = std::get<ParsedData::List>(d.val);
81+
el.container_stats->length = list.length;
82+
el.exclusive_size += (el.container_stats->capacity - el.container_stats->length) * sizeof(T0);
83+
84+
for (size_t i = 0; i < list.length; i++)
85+
stack_ins(childField);
86+
"""
87+

0 commit comments

Comments
 (0)