[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 = StaticTypes::List::type>; static StaticTypes::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(); } }; """