component_bundle

The component_bundle variadic bundler is the recommended variadic bundler for custom interface implementations with timemory when storage is desired. Custom interfaces should create a unique API struct for their implementation, e.g. via the convenience macro, TIMEMORY_DECLARE_API(myproject) and TIMEMORY_DEFINE_API(myproject) will declare/define tim::api::myproject and will ensure tim::concepts::is_api is satisfied for your API. Once this is done, bundles of tools can be aliased as such:

template <typename... Types>
using timemory_bundle_t = tim::component_bundle<tim::api::myproject, Types...>;

template <typename... Types>
using timemory_auto_bundle_t = tim::auto_bundle<tim::api::myproject, Types...>;

Using this scheme, you can disable all timemory instrumentation at compile-time or run-time via:

// disable at compile-time
TIMEMORY_DEFINE_CONCRETE_TRAIT(is_available, api::myproject, false_type)

// disable at run-time
void disable_timemory_in_myproject()
{
    tim::trait::runtime_enabled<tim::api::myproject>::set(false);
}
template<typename ...Types>
class component_bundle

This is a variadic component wrapper which combines the features of tim::component_tuple<T…> and tim::component_list<U..>. The “T” types (compile-time fixed, allocated on stack) should be specified as usual, the “U” types (runtime-time optional, allocated on the heap) should be specified as a pointer. Initialization of the optional types is similar to tim::auto_list<U…> but no environment variable is built-in since, ideally, this environment variable should be customized based on the Tag template parameter.

See also: tim::auto_bundle. The primary difference b/t the “component_*” and “auto_*” is that the latter used the constructor/destructor to call start and stop and is thus easier to just copy-and-paste into different places. However, the former is better suited for special configuration, data-access, etc.

tparam Tag

unique identifying type for the bundle which when tim::trait::is_available<Tag> is false at compile-time or tim::trait::runtime_enabled<Tag>() is false at runtime, then none of the components will be collected

tparam Types

Specification of the component types to bundle together

template<typename Tag, typename ...Types>
class tim::component_bundle<Tag, Types...> : public tim::bundle<Tag, component_bundle<Tag>, tim::variadic::mixed_wrapper_types<concat<Types...>>>, public tim::concepts::mixed_wrapper

Public Types

using captured_location_t = source_location::captured
using bundle_type = bundle<Tag, component_bundle<Tag>, tim::variadic::mixed_wrapper_types<concat<Types...>>>
using this_type = component_bundle<Tag, Types...>
using component_type = component_bundle<Tag, Types...>
using auto_type = auto_bundle<Tag, Types...>

Public Functions

template<typename ...Args>
component_bundle(Args&&...)
~component_bundle() = default
component_bundle(const component_bundle&) = default
component_bundle(component_bundle&&) noexcept = default
component_bundle &operator=(const component_bundle &rhs) = default
component_bundle &operator=(component_bundle&&) noexcept = default
template<typename ...Args>
component_bundle(Args&&... args)