19 #ifndef TLM_UTILS_INSTANCE_SPECIFIC_EXTENSIONS_INT_H_INCLUDED_ 20 #define TLM_UTILS_INSTANCE_SPECIFIC_EXTENSIONS_INT_H_INCLUDED_ 22 #ifndef SC_BUILD // incluce full TLM, when not building the library 33 class instance_specific_extension_container_pool;
50 static unsigned int register_private_extension(
const std::type_info&);
65 : m_container(container)
70 return static_cast<T*
>( set_extension(T::priv_id, ext) );
79 ext =
static_cast<T*
>(get_extension(T::priv_id));
82 ispex_base* get_extension(
unsigned int index)
const;
87 clear_extension(T::priv_id);
91 void clear_extension(
unsigned int index);
98 void resize_extensions();
102 container_type* m_container;
106 #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) 107 #pragma warning(push) 108 #pragma warning(disable: 4251) // DLL import for vector 120 friend class instance_specific_extension_container_pool;
130 void inc_use_count();
131 void dec_use_count();
138 std::vector<instance_specific_extensions_per_accessor*> m_ispex_per_accessor;
139 unsigned int use_count;
141 release_fn* m_release_fn;
147 #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) 174 #endif // TLM_UTILS_INSTANCE_SPECIFIC_EXTENSIONS_INT_H_INCLUDED_
class SC_API instance_specific_extension_container
T * set_extension(T *ext)
instance_specific_extension_container container_type
void clear_extension(const T *)
instance_specific_extensions_per_accessor(container_type *container)
void get_extension(T *&ext) const
class SC_API instance_specific_extension_accessor
#define SC_API_TEMPLATE_DECL_