[info] type_name = "std::reference_wrapper" ctype = "REF_WRAPPER_TYPE" header = "functional" # Old: typeName = "std::reference_wrapper<" ns = ["namespace std"] numTemplateParams = 1 replaceTemplateParamIndex = [] [codegen] decl = """ template void getSizeType(const %1% &ref, size_t& returnArg); """ func = """ template void getSizeType(const %1% &ref, size_t& returnArg) { SAVE_SIZE(sizeof(%1%)); SAVE_DATA((uintptr_t)&(ref.get())); if (ctx.pointers.add((uintptr_t)&ref.get())) { SAVE_DATA(1); getSizeType(ref.get(), returnArg); } else { SAVE_DATA(0); } } """ traversal_func = """ auto tail = returnArg.write((uintptr_t)&(container.get())); if (ctx.pointers.add((uintptr_t)&container.get())) { return tail.template delegate<1>([&ctx, &container](auto ret) { return OIInternal::getSizeType(ctx, container.get(), ret); }); } else { return tail.template delegate<0>(std::identity()); } """ [[codegen.processor]] type = "types::st::VarInt" func = """ el.pointer = std::get(d.val).value; """ [[codegen.processor]] type = """ types::st::Sum, typename TypeHandler::type> """ func = """ auto sum = std::get(d.val); el.container_stats.emplace(result::Element::ContainerStats { .capacity = 1, .length = sum.index, // 0 if in a cycle, 1 otherwise }); if constexpr (oi_is_complete) { if (sum.index == 1) { static constexpr auto element = make_field("ref_val"); stack_ins(element); } } """