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
-
~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)
-
using captured_location_t = source_location::captured¶