26 #ifndef TIMEMORY_VARIADIC_AUTO_BASE_BUNDLE_CPP_
27 #define TIMEMORY_VARIADIC_AUTO_BASE_BUNDLE_CPP_ 1
35 template <
typename Tag,
typename CompT,
typename BundleT>
36 template <
typename... T>
41 , m_report_at_exit(
quirk_config<quirk::exit_report, T...>::value)
42 , m_reference_object(nullptr)
43 , m_temporary(key, m_enabled, _config)
47 internal_init(init_func);
57 template <
typename Tag,
typename CompT,
typename BundleT>
58 template <
typename... T>
63 , m_report_at_exit(
quirk_config<quirk::exit_report, T...>::value)
64 , m_reference_object(nullptr)
65 , m_temporary(loc, m_enabled, _config)
69 internal_init(init_func);
79 template <
typename Tag,
typename CompT,
typename BundleT>
85 , m_report_at_exit(report_at_exit ||
quirk_config<quirk::exit_report>::value)
86 , m_reference_object(nullptr)
87 , m_temporary(key, m_enabled, _scope)
91 internal_init(init_func);
98 template <
typename Tag,
typename CompT,
typename BundleT>
104 , m_report_at_exit(report_at_exit ||
quirk_config<quirk::exit_report>::value)
105 , m_reference_object(nullptr)
106 , m_temporary(loc, m_enabled, _scope)
110 internal_init(init_func);
117 template <
typename Tag,
typename CompT,
typename BundleT>
122 , m_report_at_exit(report_at_exit ||
quirk_config<quirk::exit_report>::value)
123 , m_reference_object(nullptr)
124 , m_temporary(hash, m_enabled, _scope)
128 internal_init(init_func);
135 template <
typename Tag,
typename CompT,
typename BundleT>
139 : m_report_at_exit(report_at_exit ||
quirk_config<quirk::exit_report>::value)
140 , m_reference_object(&tmp)
151 template <
typename Tag,
typename CompT,
typename BundleT>
152 template <
typename Arg,
typename... Args>
156 Arg&& arg, Args&&... args)
160 , m_reference_object(nullptr)
161 , m_temporary(key, m_enabled, _scope)
165 internal_init(init_func, std::forward<Arg>(arg), std::forward<Args>(args)...);
172 template <
typename Tag,
typename CompT,
typename BundleT>
173 template <
typename Arg,
typename... Args>
177 Arg&& arg, Args&&... args)
181 , m_reference_object(nullptr)
182 , m_temporary(loc, m_enabled, _scope)
186 internal_init(init_func, std::forward<Arg>(arg), std::forward<Args>(args)...);
193 template <
typename Tag,
typename CompT,
typename BundleT>
194 template <
typename Arg,
typename... Args>
198 Arg&& arg, Args&&... args)
202 , m_reference_object(nullptr)
203 , m_temporary(hash, m_enabled, _scope)
207 internal_init(init_func, std::forward<Arg>(arg), std::forward<Args>(args)...);
214 template <
typename Tag,
typename CompT,
typename BundleT>
227 std::stringstream ss;
229 if(ss.str().length() > 0)
230 std::cout << ss.str() << std::endl;
233 if(m_reference_object)
235 *m_reference_object += m_temporary;
242 template <
typename Tag,
typename CompT,
typename BundleT>
250 template <
typename Tag,
typename CompT,
typename BundleT>
258 template <
typename Tag,
typename CompT,
typename BundleT>
259 template <
typename... Args>
263 m_temporary.measure(std::forward<Args>(args)...);
267 template <
typename Tag,
typename CompT,
typename BundleT>
268 template <
typename... Args>
272 m_temporary.record(std::forward<Args>(args)...);
276 template <
typename Tag,
typename CompT,
typename BundleT>
277 template <
typename... Args>
281 m_temporary.sample(std::forward<Args>(args)...);
285 template <
typename Tag,
typename CompT,
typename BundleT>
286 template <
typename... Args>
290 m_temporary.start(std::forward<Args>(args)...);
294 template <
typename Tag,
typename CompT,
typename BundleT>
295 template <
typename... Args>
299 m_temporary.stop(std::forward<Args>(args)...);
303 template <
typename Tag,
typename CompT,
typename BundleT>
304 template <
typename... Args>
308 m_temporary.assemble(std::forward<Args>(args)...);
312 template <
typename Tag,
typename CompT,
typename BundleT>
313 template <
typename... Args>
317 m_temporary.derive(std::forward<Args>(args)...);
321 template <
typename Tag,
typename CompT,
typename BundleT>
322 template <
typename... Args>
326 m_temporary.mark(std::forward<Args>(args)...);
330 template <
typename Tag,
typename CompT,
typename BundleT>
331 template <
typename... Args>
335 m_temporary.mark_begin(std::forward<Args>(args)...);
339 template <
typename Tag,
typename CompT,
typename BundleT>
340 template <
typename... Args>
344 m_temporary.mark_end(std::forward<Args>(args)...);
348 template <
typename Tag,
typename CompT,
typename BundleT>
349 template <
typename... Args>
353 m_temporary.store(std::forward<Args>(args)...);
357 template <
typename Tag,
typename CompT,
typename BundleT>
358 template <
typename... Args>
362 m_temporary.audit(std::forward<Args>(args)...);
366 template <
typename Tag,
typename CompT,
typename BundleT>
367 template <
typename... Args>
371 m_temporary.add_secondary(std::forward<Args>(args)...);
375 template <
typename Tag,
typename CompT,
typename BundleT>
376 template <
typename... Args>
380 m_temporary.reset(std::forward<Args>(args)...);
384 template <
typename Tag,
typename CompT,
typename BundleT>
385 template <
typename... Args>
389 m_temporary.set_scope(std::forward<Args>(args)...);
393 template <
typename Tag,
typename CompT,
typename BundleT>
394 template <
typename... Args>
398 m_temporary.set_prefix(std::forward<Args>(args)...);
402 template <
typename Tag,
typename CompT,
typename BundleT>
403 template <
template <
typename>
class OpT,
typename... Args>
407 m_temporary.template invoke<OpT>(std::forward<Args>(_args)...);
411 template <
typename Tag,
typename CompT,
typename BundleT>
418 template <
typename Tag,
typename CompT,
typename BundleT>
422 return m_report_at_exit;
425 template <
typename Tag,
typename CompT,
typename BundleT>
429 return m_temporary.store();
432 template <
typename Tag,
typename CompT,
typename BundleT>
436 return m_temporary.laps();
439 template <
typename Tag,
typename CompT,
typename BundleT>
443 return m_temporary.hash();
446 template <
typename Tag,
typename CompT,
typename BundleT>
450 return m_temporary.key();
453 template <
typename Tag,
typename CompT,
typename BundleT>
457 return m_temporary.data();
460 template <
typename Tag,
typename CompT,
typename BundleT>
464 return m_temporary.data();
467 template <
typename Tag,
typename CompT,
typename BundleT>
471 m_report_at_exit = val;
474 template <
typename Tag,
typename CompT,
typename BundleT>
478 m_temporary.rekey(_key);
481 template <
typename Tag,
typename CompT,
typename BundleT>
485 m_temporary.rekey(_loc);
489 template <
typename Tag,
typename CompT,
typename BundleT>
493 m_temporary.rekey(_hash);
497 template <
typename Tag,
typename CompT,
typename BundleT>
504 template <
typename Tag,
typename CompT,
typename BundleT>
515 template <
typename Tag,
typename CompT,
typename BundleT>
516 template <
typename... Tail>
520 m_temporary.template disable<Tail...>();
523 template <
typename Tag,
typename CompT,
typename BundleT>
531 template <
typename Tag,
typename CompT,
typename BundleT>
532 template <
typename Arg,
typename... Args>
540 m_temporary.construct(std::forward<Arg>(_arg), std::forward<Args>(_args)...);
typename base_type::component_type component_type
tim::variadic::impl::quirk_config< T, convert_t< BundleT, type_list<> >, U... > quirk_config
typename component_type::captured_location_t captured_location_t
#define IF_CONSTEXPR(...)
void set_scope(TupleT< Tp... > &obj, Args &&... args)
void assemble(TupleT< Tp... > &obj, Args &&... args)
void mark_begin(TupleT< Tp... > &obj, Args &&... args)
void set_prefix(TupleT< Tp... > &obj, Args &&... args)
void audit(TupleT< Tp... > &obj, Args &&... args)
void store(TupleT< Tp... > &obj, Args &&... args)
void record(TupleT< Tp... > &obj, Args &&... args)
void derive(TupleT< Tp... > &obj, Args &&... args)
void pop(TupleT< Tp... > &obj, Args &&... args)
void stop(TupleT< Tp... > &obj, Args &&... args)
void measure(TupleT< Tp... > &obj, Args &&... args)
void push(TupleT< Tp... > &obj, Args &&... args)
void mark_end(TupleT< Tp... > &obj, Args &&... args)
void mark(TupleT< Tp... > &obj, Args &&... args)
void reset(TupleT< Tp... > &obj, Args &&... args)
void start(TupleT< Tp... > &obj, Args &&... args)
Ret invoke(string_view_t &&label, Func &&func, Args &&... args)
A light-weight alternative to std::function. Pass any callback - including capturing lambdas - cheapl...
std::string string_view_t
tim::mpl::apply< std::string > string
Static polymorphic base class for automatic start/stop bundlers.
a variadic type which holds zero or more quirks that are passed to the constructor of a component bun...
this data type encodes the options of storage scope. The default is hierarchical (tree) scope....