19 #ifndef __SYSTEMC_EXT_TLM_UTILS_INSTANCE_SPECIFIC_EXTENSIONS_INT_H__ 20 #define __SYSTEMC_EXT_TLM_UTILS_INSTANCE_SPECIFIC_EXTENSIONS_INT_H__ 24 #include "../tlm_core/2/generic_payload/array.hh" 30 class instance_specific_extension_accessor;
31 class instance_specific_extension_container;
32 class instance_specific_extension_carrier;
33 class instance_specific_extension_container_pool;
40 extern template class tlm_array<tlm_utils::ispex_base *>;
58 static unsigned int register_private_extension(
const std::type_info &);
75 m_container(container)
82 return static_cast<T *
>(set_extension(T::priv_id, ext));
92 ext =
static_cast<T *
>(get_extension(T::priv_id));
95 ispex_base *get_extension(
unsigned int index)
const;
101 clear_extension(T::priv_id);
105 void clear_extension(
unsigned int index);
112 void resize_extensions();
138 void inc_use_count();
139 void dec_use_count();
146 get_accessor(
unsigned int index);
171 template <
typename T>
176 static void release_carrier(
friend class instance_specific_extension_container_pool
instance_specific_extensions_per_accessor(container_type *container)
void clear_extension(const T *)
T * set_extension(T *ext)
friend class instance_specific_extensions_per_accessor
std::vector< instance_specific_extensions_per_accessor * > m_ispex_per_accessor
void get_extension(T *&ext) const
instance_specific_extension_carrier * m_carrier
tlm::tlm_array< ispex_base * > m_extensions
friend class instance_specific_extension_carrier
release_fn * m_release_fn
container_type * m_container
void release_fn(instance_specific_extension_carrier *, void *)
friend class instance_specific_extension_accessor
instance_specific_extension_container * next
instance_specific_extension_container container_type