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

72 lines
2.0 KiB
TOML

[info]
type_name = "folly::basic_fbstring"
ctype = "FB_STRING_TYPE"
header = "folly/FBString.h"
# Old:
typeName = "folly::basic_fbstring<"
ns = ["folly::basic_fbstring", "folly::fbstring_core"]
numTemplateParams = 1
replaceTemplateParamIndex = []
[codegen]
decl = """
template <typename E,class T,class A,class Storage>
void getSizeType(const %1%<E, T, A, Storage> &container, size_t& returnArg);
"""
func = """
template <typename E,class T,class A,class Storage>
void getSizeType(const %1%<E, T, A, Storage> &container, size_t& returnArg)
{
SAVE_SIZE(sizeof(%1%<E, T, A, Storage>));
SAVE_DATA((uintptr_t)(container.data()));
SAVE_DATA((uintptr_t)container.capacity());
SAVE_DATA((uintptr_t)container.size());
bool inlined = ((uintptr_t)container.data() < (uintptr_t)(&container + sizeof(%1%<E, T, A, Storage>)))
&&
((uintptr_t)container.data() >= (uintptr_t)&container);
if (!inlined && pointers.add((uintptr_t)container.data())) {
SAVE_SIZE(container.capacity() * sizeof(T));
SAVE_DATA(1);
} else {
SAVE_DATA(0);
}
}
"""
handler = """
template <typename DB, typename T0, typename T1, typename T2, typename T3>
struct TypeHandler<DB, %1%<T0, T1, T2, T3>> {
using type = types::st::Pair<DB,
types::st::VarInt<DB>,
types::st::Pair<DB,
types::st::VarInt<DB>,
types::st::Pair<DB,
types::st::VarInt<DB>,
types::st::VarInt<DB>
>>>;
static types::st::Unit<DB> getSizeType(
const %1%<T0, T1, T2, T3>& container,
typename TypeHandler<DB, %1%<T0, T1, T2, T3>>::type returnArg) {
auto last = returnArg.write((uintptr_t)container.data())
.write(container.capacity())
.write(container.size());
bool inlined = ((uintptr_t)container.data() < (uintptr_t)(&container + sizeof(%1%<T0, T1, T2, T3>)))
&&
((uintptr_t)container.data() >= (uintptr_t)&container);
if (!inlined && pointers.add((uintptr_t)container.data())) {
return last.write(1);
} else {
return last.write(0);
}
}
};
"""