[info] type_name = "std::array" ctype = "ARRAY_TYPE" header = "array" # Old: numTemplateParams = 1 ns = ["namespace std"] typeName = "std::array<" [codegen] decl = """ template void getSizeType(const %1% &container, size_t& returnArg); """ func = """ template void getSizeType(const %1% &container, size_t& returnArg) { SAVE_DATA((uintptr_t)container.size()); SAVE_SIZE(sizeof(container)); for (auto & it: container) { // undo the static size that has already been added per-element SAVE_SIZE(-sizeof(it)); getSizeType(it, returnArg); } } """ handler = """ template struct TypeHandler> { using type = types::st::List::type>; static types::st::Unit getSizeType( const %1% &container, typename TypeHandler>::type returnArg) { auto tail = returnArg.write(container.size()); for (auto & it: container) { tail = tail.delegate([&it](auto ret) { return TypeHandler::getSizeType(it, ret); }); } return tail.finish(); } }; """ traversal_func = """ auto tail = returnArg.write(container.size()); for (auto & it: container) { tail = tail.delegate([&it](auto ret) { return TypeHandler::getSizeType(it, ret); }); } return tail.finish(); """ [[codegen.processor]] type = "types::st::List::type>" func = """ static constexpr auto childField = make_field("[]"); size_t size = std::get(d.val).length; el.exclusive_size = N0 == 0 ? 1 : 0; el.container_stats.emplace(result::Element::ContainerStats{ .capacity = size, .length = size }); for (size_t i = 0; i < size; i++) ins.emplace(childField); """