[info] type_name = "folly::IOBuf" ctype = "FOLLY_IOBUF_TYPE" header = "folly/io/IOBuf.h" # Old: typeName = "folly::IOBuf" matcher = "^folly::IOBuf$" ns = ["folly::IOBuf"] numTemplateParams = 0 replaceTemplateParamIndex = [] [codegen] decl = """ void getSizeType(const %1% &container, size_t& returnArg); """ func = """ void getSizeType(const %1% &container, size_t& returnArg) { SAVE_SIZE(sizeof(%1%)); // We calculate the length of all IOBufs in the chain manually. // IOBuf has built-in computeChainCapacity()/computeChainLength() // functions which do this for us. But dead code optimization in TAO // caused these functions to be removed which causes relocation // errors. std::size_t fullLength = container.length(); std::size_t fullCapacity = container.capacity(); for (const folly::IOBuf* current = container.next(); current != &container; current = current->next()) { fullLength += current->length(); fullCapacity += current->capacity(); } SAVE_DATA(fullCapacity); SAVE_DATA(fullLength); SAVE_SIZE(fullCapacity); } """ traversal_func = """ // We calculate the length of all IOBufs in the chain manually. // IOBuf has built-in computeChainCapacity()/computeChainLength() // functions which do this for us. But dead code optimization in TAO // caused these functions to be removed which causes relocation // errors. std::size_t fullLength = container.length(); std::size_t fullCapacity = container.capacity(); for (const folly::IOBuf* current = container.next(); current != &container; current = current->next()) { fullLength += current->length(); fullCapacity += current->capacity(); } return returnArg.write(fullCapacity).write(fullLength); """ [[codegen.processor]] type = "types::st::VarInt" func = """ el.container_stats.emplace(result::Element::ContainerStats{ .capacity = std::get(d.val).value }); el.exclusive_size += el.container_stats->capacity; """ [[codegen.processor]] type = "types::st::VarInt" func = """ el.container_stats->length = std::get(d.val).value; """