object-introspection/types/sorted_vec_set_type.toml
2023-06-30 12:54:02 +01:00

50 lines
1.7 KiB
TOML

[info]
type_name = "folly::sorted_vector_set"
ctype = "SORTED_VEC_SET_TYPE"
header = "folly/sorted_vector_types.h"
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 <class T, class Compare, class Allocator, class GrowthPolicy, class Container>
void getSizeType(const %1%<T,Compare, Allocator, GrowthPolicy, Container> &container, size_t& returnArg);
"""
func = """
template <class T, class Compare, class Allocator, class GrowthPolicy, class Container>
void getSizeType(const %1%<T,Compare, Allocator, GrowthPolicy, Container> &containerAdapter, size_t& returnArg)
{
SAVE_DATA((uintptr_t)&containerAdapter);
// Underlying container is grabbed by recursion, store only the exclusive size.
SAVE_SIZE(sizeof(%1%<T,Compare, Allocator, GrowthPolicy, Container>) - sizeof(Container));
const Container &container = containerAdapter.get_container();
getSizeType(container, returnArg);
}
"""
handler = """
template <typename DB, typename T0, typename T1, typename T2, typename T3, typename T4>
struct TypeHandler<DB, %1%<T0, T1, T2, T3, T4>> {
using type = types::st::Pair<DB,
types::st::VarInt<DB>,
typename TypeHandler<DB, T4>::type>;
static types::st::Unit<DB> getSizeType(
const %1%<T0, T1, T2, T3, T4>& container,
typename TypeHandler<DB, %1%<T0, T1, T2, T3, T4>>::type returnArg) {
auto tail = returnArg.write((uintptr_t)&container);
const T4 &underlyingContainer = container.get_container();
return OIInternal::getSizeType<DB>(underlyingContainer, tail);
}
};
"""