15 #ifndef DD4HEP_PLUGINTESTER_H
16 #define DD4HEP_PLUGINTESTER_H 1
31 typedef std::pair<const std::type_info*,std::string>
key_type;
51 template <
typename T>
static void _delete(
void* ptr) {
58 void*
extension(
const std::string& name,
const std::type_info& info,
bool alert)
const;
60 void*
removeExtension(
const std::string& name,
const std::type_info& info,
bool destroy);
72 void clear(
bool destroy=
true);
73 template<
typename Q> Q*
addExtension(Q* ptr,
const std::string& name) {
74 return (Q*)
addExtension(ptr, name,
typeid(Q), _delete<Q>);
76 template<
typename Q> Q*
extension(
const std::string& name,
bool alert=
true) {
77 return (Q*)
extension(name,
typeid(Q), alert);
79 template<
typename Q> Q*
removeExtension(
const std::string& name,
bool destroy=
true) {
85 #endif // DD4HEP_PLUGINTESTER_H
Defintiion of the extension entry.
Q * extension(const std::string &name, bool alert=true)
PluginTester & operator=(const PluginTester ©)=delete
Assignment operator.
static void _noDelete(void *)
Function to be passed as dtor if object should NOT be deleted!
virtual ~PluginTester()
Default destructor.
std::pair< const std::type_info *, std::string > key_type
Definition of the extension type.
Q * addExtension(Q *ptr, const std::string &name)
std::map< key_type, void * > Extensions
void * removeExtension(const std::string &name, const std::type_info &info, bool destroy)
Remove an existing extension object from the instance.
Extensions extensions
The extensions object.
static void _delete(void *ptr)
Templated destructor function.
std::map< const std::type_info *, Entry > ExtensionMap
void * extension(const std::string &name, const std::type_info &info, bool alert) const
Access an existing extension object from the detector element.
ExtensionMap * extensionMap
Pointer to the extension map.
void * addExtension(void *ptr, const std::string &name, const std::type_info &info, destruct_t dtor)
Add an extension object to the detector element.
Q * removeExtension(const std::string &name, bool destroy=true)
PluginTester()
Default constructor.
void clear(bool destroy=true)
Clear all extensions.
void(* destruct_t)(void *)
Extensions destructor type.