timemory  3.2.1
Modular C++ Toolkit for Performance Analysis and Logging. Profiling API and Tools for C, C++, CUDA, Fortran, and Python. The C++ template API is essentially a framework to creating tools: it is designed to provide a unifying interface for recording various performance measurements alongside data logging and interfaces to other tools.
tim::component::user_bundle< Idx, Tag > Struct Template Reference

#include "timemory/components/user_bundle/components.hpp"

+ Collaboration diagram for tim::component::user_bundle< Idx, Tag >:

Public Types

using tag_type = Tag
 
using mutex_t = std::mutex
 
using lock_t = std::unique_lock< mutex_t >
 
using string_t = std::string
 
using value_type = void
 
using this_type = user_bundle< Idx, Tag >
 
using base_type = base< this_type, value_type >
 
using storage_type = typename base_type::storage_type
 
using start_func_t = std::function< void *(const string_t &, scope::config)>
 
using stop_func_t = std::function< void(void *)>
 
using get_func_t = std::function< void(void *, void *&, size_t)>
 
using delete_func_t = std::function< void(void *)>
 
using opaque_array_t = std::vector< opaque >
 
using typeid_vec_t = std::vector< size_t >
 
using typeid_set_t = std::set< size_t >
 

Public Member Functions

 user_bundle ()
 
 user_bundle (const user_bundle &rhs)
 
 user_bundle (const char *_prefix, scope::config _scope=scope::get_default())
 
 user_bundle (const char *_prefix, opaque_array_t _bundle_vec, typeid_vec_t _typeids, scope::config _scope=scope::get_default())
 
 user_bundle (const char *_prefix, opaque_array_t _bundle_vec, const typeid_set_t &_typeids, scope::config _scope=scope::get_default())
 
 ~user_bundle ()
 
user_bundleoperator= (const user_bundle &rhs)
 
 user_bundle (user_bundle &&rhs) noexcept
 
user_bundleoperator= (user_bundle &&rhs) noexcept
 
void setup ()
 
void push ()
 
void sample ()
 
void start ()
 
void stop ()
 
void pop ()
 
void clear ()
 
template<typename T >
T * get ()
 
void get (void *&ptr, size_t _hash) const
 
void get ()
 
void set_prefix (const char *_prefix)
 
void set_scope (const scope::config &val)
 
size_t size () const
 
void insert (opaque &&obj, typeid_set_t &&_typeids)
 
template<typename Type , typename... Types, typename... Args>
void insert (Args... args)
 

Static Public Member Functions

static string_t label ()
 
static string_t description ()
 
static value_type record ()
 
static void global_init ()
 
static void global_init (storage_type *)
 
static size_t bundle_size ()
 
static void configure (opaque &&obj, std::set< size_t > &&_typeids)
 
template<typename Type , typename... Types, typename... Args>
static void configure (Args &&... args)
 
static void reset ()
 
static opaque_array_tget_data ()
 
static typeid_vec_tget_typeids ()
 
static mutex_tget_lock ()
 

Static Public Attributes

static constexpr auto index = Idx
 

Static Protected Member Functions

static bool contains (size_t _val, const typeid_vec_t &_targ)
 

Protected Attributes

bool m_setup = false
 
scope::config m_scope = {}
 
const char * m_prefix = nullptr
 
typeid_vec_t m_typeids = get_typeids()
 
opaque_array_t m_bundle = get_data()
 

Friends

struct operation::record< this_type >
 
struct operation::start< this_type >
 
struct operation::stop< this_type >
 
struct operation::set_started< this_type >
 
struct operation::set_stopped< this_type >
 

Detailed Description

template<size_t Idx, typename Tag>
struct tim::component::user_bundle< Idx, Tag >

Definition at line 121 of file components.hpp.

Member Typedef Documentation

◆ base_type

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::base_type = base<this_type, value_type>

Definition at line 134 of file components.hpp.

◆ delete_func_t

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::delete_func_t = std::function<void(void*)>

Definition at line 146 of file components.hpp.

◆ get_func_t

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::get_func_t = std::function<void(void*, void*&, size_t)>

Definition at line 145 of file components.hpp.

◆ lock_t

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::lock_t = std::unique_lock<mutex_t>

Definition at line 129 of file components.hpp.

◆ mutex_t

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::mutex_t = std::mutex

Definition at line 128 of file components.hpp.

◆ opaque_array_t

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::opaque_array_t = std::vector<opaque>

Definition at line 159 of file components.hpp.

◆ start_func_t

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::start_func_t = std::function<void*(const string_t&, scope::config)>

Definition at line 143 of file components.hpp.

◆ stop_func_t

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::stop_func_t = std::function<void(void*)>

Definition at line 144 of file components.hpp.

◆ storage_type

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::storage_type = typename base_type::storage_type

Definition at line 135 of file components.hpp.

◆ string_t

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::string_t = std::string

Definition at line 130 of file components.hpp.

◆ tag_type

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::tag_type = Tag

Definition at line 127 of file components.hpp.

◆ this_type

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::this_type = user_bundle<Idx, Tag>

Definition at line 133 of file components.hpp.

◆ typeid_set_t

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::typeid_set_t = std::set<size_t>

Definition at line 161 of file components.hpp.

◆ typeid_vec_t

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::typeid_vec_t = std::vector<size_t>

Definition at line 160 of file components.hpp.

◆ value_type

template<size_t Idx, typename Tag >
using tim::component::user_bundle< Idx, Tag >::value_type = void

Definition at line 132 of file components.hpp.

Constructor & Destructor Documentation

◆ user_bundle() [1/6]

template<size_t Idx, typename Tag >
tim::component::user_bundle< Idx, Tag >::user_bundle ( )
inline

Definition at line 170 of file components.hpp.

171  : m_scope(scope::get_default())
173  , m_bundle(get_data())
174  {}
static opaque_array_t & get_data()
Definition: components.hpp:477
static typeid_vec_t & get_typeids()
Definition: components.hpp:482

◆ user_bundle() [2/6]

template<size_t Idx, typename Tag >
tim::component::user_bundle< Idx, Tag >::user_bundle ( const user_bundle< Idx, Tag > &  rhs)
inline

Definition at line 176 of file components.hpp.

177  : base_type(rhs)
178  , m_scope(rhs.m_scope)
179  , m_prefix(rhs.m_prefix)
180  , m_typeids(rhs.m_typeids)
181  , m_bundle(rhs.m_bundle)
182  {
183  for(auto& itr : m_bundle)
184  itr.set_copy(true);
185  }
base< this_type, value_type > base_type
Definition: components.hpp:134

References tim::component::user_bundle< Idx, Tag >::m_bundle.

◆ user_bundle() [3/6]

template<size_t Idx, typename Tag >
tim::component::user_bundle< Idx, Tag >::user_bundle ( const char *  _prefix,
scope::config  _scope = scope::get_default() 
)
inlineexplicit

Definition at line 187 of file components.hpp.

188  : m_scope(_scope)
189  , m_prefix(_prefix)
191  , m_bundle(get_data())
192  {}
char const std::string & _prefix
Definition: definition.hpp:59

◆ user_bundle() [4/6]

template<size_t Idx, typename Tag >
tim::component::user_bundle< Idx, Tag >::user_bundle ( const char *  _prefix,
opaque_array_t  _bundle_vec,
typeid_vec_t  _typeids,
scope::config  _scope = scope::get_default() 
)
inline

Definition at line 194 of file components.hpp.

196  : m_scope(_scope)
197  , m_prefix(_prefix)
198  , m_typeids(std::move(_typeids))
199  , m_bundle(std::move(_bundle_vec))
200  {}

◆ user_bundle() [5/6]

template<size_t Idx, typename Tag >
tim::component::user_bundle< Idx, Tag >::user_bundle ( const char *  _prefix,
opaque_array_t  _bundle_vec,
const typeid_set_t _typeids,
scope::config  _scope = scope::get_default() 
)
inline

Definition at line 202 of file components.hpp.

204  : m_scope(_scope)
205  , m_prefix(_prefix)
206  , m_bundle(std::move(_bundle_vec))
207  {
208  m_typeids.reserve(_typeids.size());
209  for(const auto& itr : _typeids)
210  m_typeids.emplace_back(itr);
211  }

◆ ~user_bundle()

template<size_t Idx, typename Tag >
tim::component::user_bundle< Idx, Tag >::~user_bundle ( )
inline

Definition at line 213 of file components.hpp.

214  {
215  for(auto& itr : m_bundle)
216  itr.cleanup();
217  }

References tim::component::user_bundle< Idx, Tag >::m_bundle.

◆ user_bundle() [6/6]

template<size_t Idx, typename Tag >
tim::component::user_bundle< Idx, Tag >::user_bundle ( user_bundle< Idx, Tag > &&  rhs)
inlinenoexcept

Definition at line 235 of file components.hpp.

236  : base_type(std::move(rhs))
237  , m_scope(std::move(rhs.m_scope))
238  , m_prefix(std::move(rhs.m_prefix))
239  , m_typeids(std::move(rhs.m_typeids))
240  , m_bundle(std::move(rhs.m_bundle))
241  {
242  rhs.m_bundle.clear();
243  }

Member Function Documentation

◆ bundle_size()

template<size_t Idx, typename Tag >
static size_t tim::component::user_bundle< Idx, Tag >::bundle_size ( )
inlinestatic

Definition at line 163 of file components.hpp.

163 { return get_data().size(); }

References tim::component::user_bundle< Idx, Tag >::get_data().

◆ clear()

◆ configure() [1/2]

template<size_t Idx, typename Tag >
template<typename Type , typename... Types, typename... Args>
static void tim::component::user_bundle< Idx, Tag >::configure ( Args &&...  args)
inlinestatic

Definition at line 289 of file components.hpp.

290  {
291  this_type::configure(factory::get_opaque<Type>(std::forward<Args>(args)...),
292  factory::get_typeids<Type>());
293 
295  this_type::configure(factory::get_opaque<Types>(std::forward<Args>(args)...),
296  factory::get_typeids<Types>()));
297  }
static void configure(opaque &&obj, std::set< size_t > &&_typeids)
Definition: components.hpp:261
#define TIMEMORY_FOLD_EXPRESSION(...)
Definition: types.hpp:55

References tim::component::user_bundle< Idx, Tag >::configure(), and TIMEMORY_FOLD_EXPRESSION.

◆ configure() [2/2]

template<size_t Idx, typename Tag >
static void tim::component::user_bundle< Idx, Tag >::configure ( opaque &&  obj,
std::set< size_t > &&  _typeids 
)
inlinestatic

Definition at line 261 of file components.hpp.

262  {
263  if(obj)
264  {
265  lock_t lk(get_lock());
266  size_t sum = 0;
267  for(auto&& itr : _typeids)
268  {
269  if(itr > 0 && contains(itr, get_typeids()))
270  {
271  if(settings::verbose() > 1 || settings::debug())
272  PRINT_HERE("Skipping duplicate typeid: %lu", (unsigned long) itr);
273  return;
274  }
275  sum += itr;
276  if(itr > 0)
277  get_typeids().emplace_back(itr);
278  }
279  if(sum == 0)
280  {
281  PRINT_HERE("No typeids. Sum: %lu", (unsigned long) sum);
282  return;
283  }
284  get_data().emplace_back(std::move(obj));
285  }
286  }
static bool contains(size_t _val, const typeid_vec_t &_targ)
Definition: components.hpp:454
std::unique_lock< mutex_t > lock_t
Definition: components.hpp:129
static mutex_t & get_lock()
Definition: components.hpp:487
#define PRINT_HERE(...)
Definition: macros.hpp:147

References tim::component::user_bundle< Idx, Tag >::contains(), tim::debug, tim::component::user_bundle< Idx, Tag >::get_data(), tim::component::user_bundle< Idx, Tag >::get_lock(), tim::component::user_bundle< Idx, Tag >::get_typeids(), PRINT_HERE, and tim::verbose.

Referenced by tim::component::user_bundle< Idx, Tag >::configure().

◆ contains()

template<size_t Idx, typename Tag >
static bool tim::component::user_bundle< Idx, Tag >::contains ( size_t  _val,
const typeid_vec_t _targ 
)
inlinestaticprotected

Definition at line 454 of file components.hpp.

455  {
456  return std::any_of(_targ.begin(), _targ.end(),
457  [&_val](auto itr) { return (itr == _val); });
458  }

Referenced by tim::component::user_bundle< Idx, Tag >::configure(), and tim::component::user_bundle< Idx, Tag >::insert().

◆ description()

template<size_t Idx, typename Tag >
static string_t tim::component::user_bundle< Idx, Tag >::description ( )
inlinestatic

Definition at line 149 of file components.hpp.

150  {
151  return "Generic bundle of components designed for runtime configuration by a "
152  "user via environment variables and/or direct insertion";
153  }

◆ get() [1/3]

template<size_t Idx, typename Tag >
template<typename T >
T* tim::component::user_bundle< Idx, Tag >::get ( )
inline

Definition at line 368 of file components.hpp.

369  {
370  auto _typeid_hash = typeid_hash<T>();
371  void* void_ptr = nullptr;
372  for(auto& itr : m_bundle)
373  {
374  itr.get(void_ptr, _typeid_hash);
375  if(void_ptr)
376  return static_cast<T*>(void_ptr);
377  }
378  return static_cast<T*>(void_ptr);
379  }

References tim::component::user_bundle< Idx, Tag >::m_bundle.

◆ get() [2/3]

template<size_t Idx, typename Tag >
void tim::component::user_bundle< Idx, Tag >::get ( )
inline

Definition at line 394 of file components.hpp.

394 {}

◆ get() [3/3]

template<size_t Idx, typename Tag >
void tim::component::user_bundle< Idx, Tag >::get ( void *&  ptr,
size_t  _hash 
) const
inline

Definition at line 381 of file components.hpp.

382  {
383  if(ptr == nullptr)
384  {
385  for(const auto& itr : m_bundle)
386  {
387  itr.get(ptr, _hash);
388  if(ptr)
389  break;
390  }
391  }
392  }

References tim::component::user_bundle< Idx, Tag >::m_bundle.

◆ get_data()

template<size_t Idx, typename Tag >
static opaque_array_t& tim::component::user_bundle< Idx, Tag >::get_data ( )
inlinestatic

◆ get_lock()

template<size_t Idx, typename Tag >
static mutex_t& tim::component::user_bundle< Idx, Tag >::get_lock ( )
inlinestatic

Definition at line 487 of file components.hpp.

487 { return get_persistent_data().m_lock; }

Referenced by tim::component::user_bundle< Idx, Tag >::configure(), and tim::component::user_bundle< Idx, Tag >::reset().

◆ get_typeids()

template<size_t Idx, typename Tag >
static typeid_vec_t& tim::component::user_bundle< Idx, Tag >::get_typeids ( )
inlinestatic

Definition at line 482 of file components.hpp.

482 { return get_persistent_data().m_typeids; }

Referenced by tim::component::user_bundle< Idx, Tag >::configure(), and tim::component::user_bundle< Idx, Tag >::reset().

◆ global_init() [1/2]

template<size_t Idx, typename Tag >
void tim::component::user_bundle< Idx, Tag >::global_init
static

Definition at line 494 of file components.hpp.

495 {
496  if(settings::verbose() > 2 || settings::debug())
497  PRINT_HERE("Global initialization of %s", demangle<this_type>().c_str());
498  env::initialize_bundle<Idx, Tag>();
499 }

References tim::debug, PRINT_HERE, and tim::verbose.

◆ global_init() [2/2]

template<size_t Idx, typename Tag >
static void tim::component::user_bundle< Idx, Tag >::global_init ( storage_type )
inlinestatic

◆ insert() [1/2]

template<size_t Idx, typename Tag >
template<typename Type , typename... Types, typename... Args>
void tim::component::user_bundle< Idx, Tag >::insert ( Args...  args)
inline

Definition at line 439 of file components.hpp.

440  {
441  this->insert(factory::get_opaque<Type>(args...), factory::get_typeids<Type>());
442  TIMEMORY_FOLD_EXPRESSION(this->insert(factory::get_opaque<Types>(args...),
443  factory::get_typeids<Types>()));
444  }
void insert(opaque &&obj, typeid_set_t &&_typeids)
Definition: components.hpp:412

References tim::component::user_bundle< Idx, Tag >::insert(), and TIMEMORY_FOLD_EXPRESSION.

◆ insert() [2/2]

template<size_t Idx, typename Tag >
void tim::component::user_bundle< Idx, Tag >::insert ( opaque &&  obj,
typeid_set_t &&  _typeids 
)
inline

Definition at line 412 of file components.hpp.

413  {
414  if(obj)
415  {
416  size_t sum = 0;
417  for(auto&& itr : _typeids)
418  {
419  if(itr > 0 && contains(itr, m_typeids))
420  {
421  if(settings::verbose() > 1 || settings::debug())
422  PRINT_HERE("Skipping duplicate typeid: %lu", (unsigned long) itr);
423  return;
424  }
425  sum += itr;
426  if(itr > 0)
427  m_typeids.emplace_back(itr);
428  }
429  if(sum == 0)
430  {
431  PRINT_HERE("No typeids. Sum: %lu", (unsigned long) sum);
432  return;
433  }
434  m_bundle.emplace_back(std::move(obj));
435  }
436  }

References tim::component::user_bundle< Idx, Tag >::contains(), tim::debug, tim::component::user_bundle< Idx, Tag >::m_bundle, tim::component::user_bundle< Idx, Tag >::m_typeids, PRINT_HERE, and tim::verbose.

Referenced by tim::component::user_bundle< Idx, Tag >::insert().

◆ label()

template<size_t Idx, typename Tag >
static string_t tim::component::user_bundle< Idx, Tag >::label ( )
inlinestatic

Definition at line 148 of file components.hpp.

148 { return "user_bundle"; }

◆ operator=() [1/2]

template<size_t Idx, typename Tag >
user_bundle& tim::component::user_bundle< Idx, Tag >::operator= ( const user_bundle< Idx, Tag > &  rhs)
inline

Definition at line 219 of file components.hpp.

220  {
221  if(this == &rhs)
222  return *this;
223 
224  base_type::operator=(rhs);
225  m_scope = rhs.m_scope;
226  m_prefix = rhs.m_prefix;
227  m_typeids = rhs.m_typeids;
228  m_bundle = rhs.m_bundle;
229  for(auto& itr : m_bundle)
230  itr.set_copy(true);
231 
232  return *this;
233  }

References tim::component::user_bundle< Idx, Tag >::m_bundle, tim::component::user_bundle< Idx, Tag >::m_prefix, tim::component::user_bundle< Idx, Tag >::m_scope, and tim::component::user_bundle< Idx, Tag >::m_typeids.

◆ operator=() [2/2]

template<size_t Idx, typename Tag >
user_bundle& tim::component::user_bundle< Idx, Tag >::operator= ( user_bundle< Idx, Tag > &&  rhs)
inlinenoexcept

Definition at line 245 of file components.hpp.

246  {
247  if(this != &rhs)
248  {
249  base_type::operator=(std::move(rhs));
250  m_scope = std::move(rhs.m_scope);
251  m_prefix = std::move(rhs.m_prefix);
252  m_typeids = std::move(rhs.m_typeids);
253  m_bundle = std::move(rhs.m_bundle);
254  rhs.m_bundle.clear();
255  }
256  return *this;
257  }

References tim::component::user_bundle< Idx, Tag >::m_bundle, tim::component::user_bundle< Idx, Tag >::m_prefix, tim::component::user_bundle< Idx, Tag >::m_scope, and tim::component::user_bundle< Idx, Tag >::m_typeids.

◆ pop()

template<size_t Idx, typename Tag >
void tim::component::user_bundle< Idx, Tag >::pop ( )
inline

Definition at line 352 of file components.hpp.

353  {
354  for(auto& itr : m_bundle)
355  itr.pop();
356  }

References tim::component::user_bundle< Idx, Tag >::m_bundle.

◆ push()

template<size_t Idx, typename Tag >
void tim::component::user_bundle< Idx, Tag >::push ( )
inline

◆ record()

template<size_t Idx, typename Tag >
static value_type tim::component::user_bundle< Idx, Tag >::record ( )
inlinestatic

Definition at line 154 of file components.hpp.

154 {}

◆ reset()

template<size_t Idx, typename Tag >
static void tim::component::user_bundle< Idx, Tag >::reset ( )
inlinestatic

Definition at line 302 of file components.hpp.

303  {
304  if(settings::verbose() > 3 || settings::debug())
305  PRINT_HERE("Resetting %s", demangle<this_type>().c_str());
306  lock_t lk(get_lock());
307  get_data().clear();
308  get_typeids().clear();
309  }

References tim::debug, tim::component::user_bundle< Idx, Tag >::get_data(), tim::component::user_bundle< Idx, Tag >::get_lock(), tim::component::user_bundle< Idx, Tag >::get_typeids(), PRINT_HERE, and tim::verbose.

◆ sample()

template<size_t Idx, typename Tag >
void tim::component::user_bundle< Idx, Tag >::sample ( )
inline

Definition at line 332 of file components.hpp.

333  {
334  setup();
335  for(auto& itr : m_bundle)
336  itr.sample();
337  }

References tim::component::user_bundle< Idx, Tag >::m_bundle, and tim::component::user_bundle< Idx, Tag >::setup().

◆ set_prefix()

template<size_t Idx, typename Tag >
void tim::component::user_bundle< Idx, Tag >::set_prefix ( const char *  _prefix)
inline

◆ set_scope()

template<size_t Idx, typename Tag >
void tim::component::user_bundle< Idx, Tag >::set_scope ( const scope::config val)
inline

Definition at line 402 of file components.hpp.

403  {
404  m_scope = val;
405  m_setup = false;
406  }

References tim::component::user_bundle< Idx, Tag >::m_scope, and tim::component::user_bundle< Idx, Tag >::m_setup.

◆ setup()

◆ size()

template<size_t Idx, typename Tag >
size_t tim::component::user_bundle< Idx, Tag >::size ( ) const
inline

Definition at line 408 of file components.hpp.

408 { return m_bundle.size(); }

References tim::component::user_bundle< Idx, Tag >::m_bundle.

◆ start()

template<size_t Idx, typename Tag >
void tim::component::user_bundle< Idx, Tag >::start ( )
inline

Definition at line 339 of file components.hpp.

340  {
341  setup();
342  for(auto& itr : m_bundle)
343  itr.start();
344  }

References tim::component::user_bundle< Idx, Tag >::m_bundle, and tim::component::user_bundle< Idx, Tag >::setup().

◆ stop()

template<size_t Idx, typename Tag >
void tim::component::user_bundle< Idx, Tag >::stop ( )
inline

Definition at line 346 of file components.hpp.

347  {
348  for(auto& itr : m_bundle)
349  itr.stop();
350  }

References tim::component::user_bundle< Idx, Tag >::m_bundle.

Referenced by tim::component::user_bundle< Idx, Tag >::clear().

Friends And Related Function Documentation

◆ operation::record< this_type >

template<size_t Idx, typename Tag >
friend struct operation::record< this_type >
friend

Definition at line 126 of file components.hpp.

◆ operation::set_started< this_type >

template<size_t Idx, typename Tag >
friend struct operation::set_started< this_type >
friend

Definition at line 126 of file components.hpp.

◆ operation::set_stopped< this_type >

template<size_t Idx, typename Tag >
friend struct operation::set_stopped< this_type >
friend

Definition at line 126 of file components.hpp.

◆ operation::start< this_type >

template<size_t Idx, typename Tag >
friend struct operation::start< this_type >
friend

Definition at line 126 of file components.hpp.

◆ operation::stop< this_type >

template<size_t Idx, typename Tag >
friend struct operation::stop< this_type >
friend

Definition at line 126 of file components.hpp.

Member Data Documentation

◆ index

template<size_t Idx, typename Tag >
constexpr auto tim::component::user_bundle< Idx, Tag >::index = Idx
staticconstexpr

Definition at line 126 of file components.hpp.

◆ m_bundle

◆ m_prefix

◆ m_scope

◆ m_setup

◆ m_typeids


The documentation for this struct was generated from the following file: