[info] type_name = "folly::sorted_vector_set" header = "folly/sorted_vector_types.h" ctype = "SORTED_VEC_SET_TYPE" stub_template_params = [1,2] underlying_container_index = 4 # Old typeName = "folly::sorted_vector_set<" ns = ["namespace std", "folly::sorted_vector_set"] replaceTemplateParamIndex = [1,2] underlyingContainerIndex = 4 [codegen] decl = """ template void getSizeType(const %1% &container, size_t& returnArg); """ func = """ template void getSizeType(const %1% &containerAdapter, size_t& returnArg) { SAVE_DATA((uintptr_t)&containerAdapter); // Underlying container is grabbed by recursion, store only the exclusive size. SAVE_SIZE(sizeof(%1%) - sizeof(Container)); const Container &container = containerAdapter.get_container(); getSizeType(container, returnArg); } """ traversal_func = ''' auto tail = returnArg.write((uintptr_t)&container) .write(container.capacity()) .write(container.size()); for (const auto& el : container) { tail = tail.delegate([&ctx, &el](auto ret) { return OIInternal::getSizeType(ctx, el, ret); }); } return tail.finish(); ''' [[codegen.processor]] type = "types::st::VarInt" func = "el.pointer = std::get(d.val).value;" [[codegen.processor]] type = "types::st::VarInt" func = ''' el.container_stats.emplace(result::Element::ContainerStats{ .capacity = std::get(d.val).value }); ''' [[codegen.processor]] type = "types::st::List::type>" func = """ static constexpr auto childField = make_field("[]"); auto list = std::get(d.val); el.container_stats->length = list.length; el.exclusive_size += (el.container_stats->capacity - el.container_stats->length) * sizeof(T0); for (size_t i = 0; i < list.length; i++) stack_ins(childField); """