26#ifndef TIMEMORY_VARIADIC_AUTO_BASE_BUNDLE_CPP_
27#define TIMEMORY_VARIADIC_AUTO_BASE_BUNDLE_CPP_ 1
35template <
typename Tag,
typename CompT,
typename BundleT>
38, m_report_at_exit{
false }
39, m_reference_object{ nullptr }
44 internal_init(get_initializer());
51template <
typename Tag,
typename CompT,
typename BundleT>
52template <
typename... T>
57, m_report_at_exit(
quirk_config<quirk::exit_report, T...>::value)
58, m_reference_object(nullptr)
59, m_temporary(key, m_enabled, _config)
63 internal_init(init_func);
73template <
typename Tag,
typename CompT,
typename BundleT>
74template <
typename... T>
79, m_report_at_exit(
quirk_config<quirk::exit_report, T...>::value)
80, m_reference_object(nullptr)
81, m_temporary(loc, m_enabled, _config)
85 internal_init(init_func);
95template <
typename Tag,
typename CompT,
typename BundleT>
101, m_report_at_exit(report_at_exit ||
quirk_config<quirk::exit_report>::value)
102, m_reference_object(nullptr)
103, m_temporary(key, m_enabled, _scope)
107 internal_init(init_func);
114template <
typename Tag,
typename CompT,
typename BundleT>
120, m_report_at_exit(report_at_exit ||
quirk_config<quirk::exit_report>::value)
121, m_reference_object(nullptr)
122, m_temporary(loc, m_enabled, _scope)
126 internal_init(init_func);
133template <
typename Tag,
typename CompT,
typename BundleT>
138, m_report_at_exit(report_at_exit ||
quirk_config<quirk::exit_report>::value)
139, m_reference_object(nullptr)
140, m_temporary(hash, m_enabled, _scope)
144 internal_init(init_func);
151template <
typename Tag,
typename CompT,
typename BundleT>
155: m_report_at_exit(report_at_exit ||
quirk_config<quirk::exit_report>::value)
156, m_reference_object(&tmp)
167template <
typename Tag,
typename CompT,
typename BundleT>
168template <
typename Arg,
typename... Args>
172 Arg&& arg, Args&&... args)
176, m_reference_object(nullptr)
177, m_temporary(key, m_enabled, _scope)
181 internal_init(init_func, std::forward<Arg>(arg), std::forward<Args>(args)...);
188template <
typename Tag,
typename CompT,
typename BundleT>
189template <
typename Arg,
typename... Args>
193 Arg&& arg, Args&&... args)
197, m_reference_object(nullptr)
198, m_temporary(loc, m_enabled, _scope)
202 internal_init(init_func, std::forward<Arg>(arg), std::forward<Args>(args)...);
209template <
typename Tag,
typename CompT,
typename BundleT>
210template <
typename Arg,
typename... Args>
214 Arg&& arg, Args&&... args)
218, m_reference_object(nullptr)
219, m_temporary(hash, m_enabled, _scope)
223 internal_init(init_func, std::forward<Arg>(arg), std::forward<Args>(args)...);
230template <
typename Tag,
typename CompT,
typename BundleT>
243 std::stringstream ss;
245 if(ss.str().length() > 0)
246 std::cout << ss.str() << std::endl;
249 if(m_reference_object)
251 *m_reference_object += m_temporary;
258template <
typename Tag,
typename CompT,
typename BundleT>
259template <
typename... Args>
263 m_temporary.push(std::forward<Args>(args)...);
264 return get_this_type();
267template <
typename Tag,
typename CompT,
typename BundleT>
268template <
typename... Args>
272 m_temporary.pop(std::forward<Args>(args)...);
273 return get_this_type();
276template <
typename Tag,
typename CompT,
typename BundleT>
277template <
typename... Args>
281 m_temporary.measure(std::forward<Args>(args)...);
282 return get_this_type();
285template <
typename Tag,
typename CompT,
typename BundleT>
286template <
typename... Args>
290 m_temporary.record(std::forward<Args>(args)...);
291 return get_this_type();
294template <
typename Tag,
typename CompT,
typename BundleT>
295template <
typename... Args>
299 m_temporary.sample(std::forward<Args>(args)...);
300 return get_this_type();
303template <
typename Tag,
typename CompT,
typename BundleT>
304template <
typename... Args>
308 m_temporary.start(std::forward<Args>(args)...);
309 return get_this_type();
312template <
typename Tag,
typename CompT,
typename BundleT>
313template <
typename... Args>
317 m_temporary.stop(std::forward<Args>(args)...);
318 return get_this_type();
321template <
typename Tag,
typename CompT,
typename BundleT>
322template <
typename... Args>
326 m_temporary.assemble(std::forward<Args>(args)...);
327 return get_this_type();
330template <
typename Tag,
typename CompT,
typename BundleT>
331template <
typename... Args>
335 m_temporary.derive(std::forward<Args>(args)...);
336 return get_this_type();
339template <
typename Tag,
typename CompT,
typename BundleT>
340template <
typename... Args>
344 m_temporary.mark(std::forward<Args>(args)...);
345 return get_this_type();
348template <
typename Tag,
typename CompT,
typename BundleT>
349template <
typename... Args>
353 m_temporary.mark_begin(std::forward<Args>(args)...);
354 return get_this_type();
357template <
typename Tag,
typename CompT,
typename BundleT>
358template <
typename... Args>
362 m_temporary.mark_end(std::forward<Args>(args)...);
363 return get_this_type();
366template <
typename Tag,
typename CompT,
typename BundleT>
367template <
typename... Args>
371 m_temporary.store(std::forward<Args>(args)...);
372 return get_this_type();
375template <
typename Tag,
typename CompT,
typename BundleT>
376template <
typename... Args>
380 m_temporary.audit(std::forward<Args>(args)...);
381 return get_this_type();
384template <
typename Tag,
typename CompT,
typename BundleT>
385template <
typename... Args>
389 m_temporary.add_secondary(std::forward<Args>(args)...);
390 return get_this_type();
393template <
typename Tag,
typename CompT,
typename BundleT>
394template <
typename... Args>
398 m_temporary.reset(std::forward<Args>(args)...);
399 return get_this_type();
402template <
typename Tag,
typename CompT,
typename BundleT>
403template <
typename... Args>
407 m_temporary.set_scope(std::forward<Args>(args)...);
408 return get_this_type();
411template <
typename Tag,
typename CompT,
typename BundleT>
412template <
typename... Args>
416 m_temporary.set_prefix(std::forward<Args>(args)...);
417 return get_this_type();
420template <
typename Tag,
typename CompT,
typename BundleT>
421template <
template <
typename>
class OpT,
typename... Args>
425 m_temporary.template invoke<OpT>(std::forward<Args>(
_args)...);
426 return get_this_type();
429template <
typename Tag,
typename CompT,
typename BundleT>
436template <
typename Tag,
typename CompT,
typename BundleT>
440 return m_report_at_exit;
443template <
typename Tag,
typename CompT,
typename BundleT>
447 return m_temporary.store();
450template <
typename Tag,
typename CompT,
typename BundleT>
454 return m_temporary.laps();
457template <
typename Tag,
typename CompT,
typename BundleT>
461 return m_temporary.hash();
464template <
typename Tag,
typename CompT,
typename BundleT>
468 return m_temporary.key();
471template <
typename Tag,
typename CompT,
typename BundleT>
475 return m_temporary.data();
478template <
typename Tag,
typename CompT,
typename BundleT>
482 return m_temporary.data();
485template <
typename Tag,
typename CompT,
typename BundleT>
489 m_report_at_exit = val;
490 return get_this_type();
493template <
typename Tag,
typename CompT,
typename BundleT>
497 m_temporary.rekey(_key);
498 return get_this_type();
501template <
typename Tag,
typename CompT,
typename BundleT>
505 m_temporary.rekey(_loc);
506 return get_this_type();
509template <
typename Tag,
typename CompT,
typename BundleT>
513 m_temporary.rekey(_hash);
514 return get_this_type();
517template <
typename Tag,
typename CompT,
typename BundleT>
524template <
typename Tag,
typename CompT,
typename BundleT>
535template <
typename Tag,
typename CompT,
typename BundleT>
536template <
typename... Tail>
540 m_temporary.template disable<Tail...>();
543template <
typename Tag,
typename CompT,
typename BundleT>
551template <
typename Tag,
typename CompT,
typename BundleT>
552template <
typename Arg,
typename... Args>
560 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::array< char *, 4 > _args
const std::string & string_view_cref_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....