58template <
typename Tp,
typename... Args,
61create_heap_variadic(Args... args)
63 return new Tp{ std::move(args)... };
68template <
typename Tp,
typename Label,
typename... Args,
71create_heap_variadic(Label&& _label,
scope::config, Args&&... args)
73 return new Tp{ std::forward<Label>(_label), std::forward<Args>(args)... };
85template <
typename Toolset>
102template <
typename Toolset,
typename... Args>
108 if(Toolset::size() == 0)
118 _obj.m_typeid = typeid_hash<Toolset>();
120 _obj.m_init = []() {};
125 Toolset_t* _result =
static_cast<Toolset_t*
>(v_result);
126 if(_result ==
nullptr)
129 create_heap_variadic<Toolset_t>(
_prefix, _scope + _arg_scope, args...);
135 return static_cast<void*
>(_result);
138 _obj.m_setup = _setup;
142 v_result = _setup(v_result,
_prefix, arg_scope);
146 Toolset_t* _result =
static_cast<Toolset_t*
>(v_result);
151 _obj.m_sample = [](
void* v_result) {
155 Toolset_t* _result =
static_cast<Toolset_t*
>(v_result);
160 _obj.m_start = [](
void* v_result) {
164 Toolset_t* _result =
static_cast<Toolset_t*
>(v_result);
169 _obj.m_stop = [](
void* v_result) {
173 Toolset_t* _result =
static_cast<Toolset_t*
>(v_result);
178 _obj.m_pop = [](
void* v_result) {
182 Toolset_t* _result =
static_cast<Toolset_t*
>(v_result);
187 _obj.m_get = [](
void* v_result,
void*& ptr,
size_t _hash) {
191 Toolset_t* _result =
static_cast<Toolset_t*
>(v_result);
192 _result->get(ptr, _hash);
196 _obj.m_del = [](
void* v_result) {
200 Toolset_t* _result =
static_cast<Toolset_t*
>(v_result);
212template <
typename Toolset,
typename... Args>
221template <typename T, bool IsWrapper = concepts::is_wrapper<T>::value>
231 "Internal timemory error! Type should not be a variadic wrapper");
233 template <
typename U = T>
239 template <
typename U = T>
242 return typeid_hash<U>();
245 template <
typename U = T>
251 template <
typename U = T>
260template <
template <
typename...>
class TupleT,
typename... T>
266 "Internal timemory error! Type should not be a variadic wrapper");
268 template <
typename U = TupleT<T...>>
274 template <
typename U = TupleT<T...>>
283template <
template <
typename...>
class TupleT,
typename... T>
289 "Internal timemory error! Type should be a variadic wrapper");
291 template <
typename U = TupleT<T...>>
299 template <
typename U = TupleT<T...>>
306 template <
typename U>
309 ret.insert(typeid_hash<U>());
312 template <
typename U>
325template <
typename Toolset,
typename Arg,
typename... Args>
329 return hidden::get_opaque<Toolset>(std::forward<Arg>(arg),
330 std::forward<Args>(args)...);
337template <
typename Toolset>
341 return hidden::get_opaque<Toolset>(tim::scope::get_default());
348template <
typename Toolset>
352 return hidden::get_opaque<Toolset>(_scope);
359template <
typename Toolset>
enable_if_t<!concepts::is_wrapper< Toolset >::value &&trait::is_available< Toolset >::value, opaque > get_opaque(scope::config _scope)
opaque get_opaque(Arg &&arg, Args &&... args)
opaque get_opaque(scope::config _scope)
std::set< size_t > get_typeids()
typename std::enable_if< B, T >::type enable_if_t
char const std::string & _prefix
const std::string & string_view_cref_t
auto get(const auto_bundle< Tag, Types... > &_obj)
Declare the operations types.
Definition for various functions for sample in operations.
static size_t hash(enable_if_t<!trait::is_available< U >::value, long >=0)
static auto hash(enable_if_t< trait::is_available< U >::value, int >=0)
static auto get(enable_if_t< trait::is_available< U >::value, int >=0)
std::set< size_t > result_type
static result_type get(enable_if_t<!trait::is_available< U >::value, long >=0)
static result_type get(enable_if_t<!trait::is_available< U >::value, long >=0)
static result_type get(enable_if_t< trait::is_available< U >::value, int >=0)
std::set< size_t > result_type
static result_type get(enable_if_t< trait::is_available< U >::value, int >=0)
static result_type get(enable_if_t<!trait::is_available< U >::value, long >=0)
std::set< size_t > result_type
concept that specifies that a type is a timemory variadic wrapper
this data type encodes the options of storage scope. The default is hierarchical (tree) scope....
trait that signifies that an implementation for the component is available. When this is set to false...
#define DEBUG_PRINT_HERE(...)
#define TIMEMORY_FOLD_EXPRESSION(...)