3d91603c8e
std::basic_string takes three template parameters: 1. CharT 2. Traits 3. Allocator The Traits parameter was causing issues, as it requires a type which exposes certain things, e.g. `Traits::value_type`. We have a few options to resolve this: 1. Remove this parameter, as we do for allocators Cons: removing a template parameter doesn't work if other parameters appear after it 2. Stub this parameter, as we do for hashers/comparators Cons: we need to hardcode an implementation that satisfies the `Traits::value_type` requirements 3. Leave the parameter as-is Cons: will not work if a non-standard Traits is used By using the real implementation of this Traits parameter (normally `std::char_traits<CharT>`), we get one that we know will work as long as it is defined in a stdlib header. Option 3 is what we use in this patch. Instead of adding more configuration options to the container TOML file format (e.g. `params_to_keep = [1]`), we add `std::char_traits` as a dummy container type. Now, whenever `std::char_traits` appears, it will be left as-is, i.e. not removed, replaced or reverse-engineered. This is the same approach previously used for Thrift's isset_bitset. |
||
---|---|---|
.. | ||
array_type.toml | ||
boost_bimap_type.toml | ||
caffe2_blob_type.toml | ||
cxx11_list_type.toml | ||
cxx11_string_type.toml | ||
deque_list_type.toml | ||
f14_fast_map.toml | ||
f14_fast_set.toml | ||
f14_node_map.toml | ||
f14_node_set.toml | ||
f14_vector_map.toml | ||
f14_vector_set.toml | ||
fb_string_type.toml | ||
folly_iobuf_queue_type.toml | ||
folly_iobuf_type.toml | ||
folly_optional_type.toml | ||
folly_small_heap_vector_map.toml | ||
list_type.toml | ||
map_seq_type.toml | ||
multi_map_type.toml | ||
optional_type.toml | ||
pair_type.toml | ||
priority_queue_container_adapter_type.toml | ||
queue_container_adapter_type.toml | ||
README.md | ||
ref_wrapper_type.toml | ||
repeated_field_type.toml | ||
repeated_ptr_field_type.toml | ||
seq_type.toml | ||
set_type.toml | ||
shrd_ptr_type.toml | ||
small_vec_type.toml | ||
sorted_vec_set_type.toml | ||
stack_container_adapter_type.toml | ||
std_char_traits.toml | ||
std_map_type.toml | ||
std_unordered_map_type.toml | ||
std_variant.toml | ||
string_type.toml | ||
thrift_isset_type.toml | ||
try_type.toml | ||
uniq_ptr_type.toml | ||
unordered_set_type.toml | ||
weak_ptr_type.toml |
Container Type Definition Format
This document describes the format of the container definition files contained in this directory.
info
-
type_name
The fully-qualified name of the container type. This is used to match against the names of types contained in an executable's debug information.
-
ctype
A reference to the enum
ContainerTypeEnum
in OI's source code. -
header
The name of the C++ header file in which this container is defined.
-
stub_template_params
The indexes of template parameters which do not represent types stored within this container. These parameters will not be recursed into and measured by OI.
-
underlying_container_index
Only used for container adapters. Points OI to the template parameter representing the underlying container to be measured.
codegen
-
decl
C++ code for the declaration of a
getSizeType
function for this container. -
func
C++ code for the definition of a
getSizeType
function for this container.
Changes introduced with TypeGraph
typeName
andmatcher
fields have been merged into the single fieldtype_name
.ns
namespace definition is no longer required.underlyingContainerIndex
renamed tounderlying_container_index
- The options for measuring / stubbing / removing template parameters have been reworked:
- By default all parameters are now measured. This includes the tail parameters in a variadic template.
- There is one option to specify template parameters which should not be measured:
stub_template_params
. The type graph code will automatically determine what type of stubbing to apply to each parameter in this list.
Deprecated Options
-
numTemplateParams
The first
numTemplateParams
template parameters for this container represent the types for the data we want to process. If this is not set, use all a container's template parameters. All of a container's parameters will still be enumerated and output in CodeGen, regardless of this setting. -
allocatorIndex
Index of a template parameter representing an allocator. It will be not be used when CodeGenning this container.
-
replaceTemplateParamIndex
Indexes of template parameters to be stubbed out, i.e. replaced with dummy structs of a given size. Used for custom hashers and comparers.