| The Gaudi Framework v27r1

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Namespace List
- Namespace Members

Classes | Functions
Gaudi::PluginService::Details Namespace Reference

## Classes
class | Factory
| Class providing default factory functions. More...
class | Logger
| Simple logging class, just to provide a default implementation. More...
class | Registry
| In-memory database of the loaded factories. More...

## Functions
GAUDIPS_API void * | getCreator (const std::string &id, const std::string &type)
| Function used to load a specific factory function. More...
template<typename F >
F | getCreator (const std::string &id)
| Convoluted implementation of getCreator with an embedded reinterpret_cast, used to avoid the warning. More...
GAUDIPS_API std::string | demangle (const std::type_info &id)
| Return a canonical name for type_info object (implementation borrowed from GaudiKernel/System). More...
template<typename T >
std::string | demangle ()
| Return a canonical name for the template argument. More...
GAUDIPS_API Logger & | logger ()
| Return the current logger instance. More...
GAUDIPS_API void | setLogger (Logger *logger)
| Set the logger instance to use. More...
std::string | demangle (const std::string &id)

## Function Documentation

std::string Gaudi::PluginService::Details::demangle | ( | const std::type_info & | id | ) |

Return a canonical name for type_info object (implementation borrowed from GaudiKernel/System).

Definition at line 134 of file PluginService.cpp.

134 {
135 return demangle(id.name());
136 }
gaudiComponentHelp.name
name
Definition: gaudiComponentHelp.py:28
Gaudi::PluginService::Details::demangle
std::string demangle(const std::string &id)
Definition: PluginService.cpp:127
template<typename T >

std::string Gaudi::PluginService::Details::demangle | ( |  | ) |
| inline

Return a canonical name for the template argument.

Definition at line 96 of file PluginServiceDetails.h.

96 { return demangle(typeid(T)); }
Gaudi::PluginService::Details::demangle
std::string demangle()
Return a canonical name for the template argument.
Definition: PluginServiceDetails.h:96

std::string Gaudi::PluginService::Details::demangle | ( | const std::string & | id | ) |

Definition at line 127 of file PluginService.cpp.

127 {
128 int status;
129 auto realname = std::unique_ptr<char,decltype(free)*>( abi::__cxa_demangle(id.c_str(), nullptr, nullptr, &status),
130 free );
131 if (!realname) return id;
132 return std::string{realname.get()};
133 }
std::free
T free(T...args)
std::string
STL class.
std::unique_ptr
STL class.

void * Gaudi::PluginService::Details::getCreator | ( | const std::string & | id,
|  | const std::string & | type
| ) |  |

Function used to load a specific factory function.

Returns
  the pointer to the factory function.

Definition at line 123 of file PluginService.cpp.

123 {
124 return Registry::instance().get(id, type);
125 }
template<typename F >

F Gaudi::PluginService::Details::getCreator | ( | const std::string & | id | ) |
| inline

Convoluted implementation of getCreator with an embedded reinterpret_cast, used to avoid the warning.

    warning: ISO C++ forbids casting between pointer-to-function and pointer-to-object

It is an ugly trick but works.
See:

- http://www.trilithium.com/johan/2004/12/problem-with-dlsym/
- http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#573
- http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#195

Definition at line 83 of file PluginServiceDetails.h.

83 {
84 union { void* src; F dst; } p2p;
85 p2p.src = getCreator(id, typeid(F).name());
86 return p2p.dst;
87 }
gaudiComponentHelp.name
name
Definition: gaudiComponentHelp.py:28
ReadAndWriteWhiteBoard.dst
tuple dst
Definition: ReadAndWriteWhiteBoard.py:17
Gaudi::PluginService::Details::getCreator
F getCreator(const std::string &id)
Convoluted implementation of getCreator with an embedded reinterpret_cast, used to avoid the warning...
Definition: PluginServiceDetails.h:83

Logger & Gaudi::PluginService::Details::logger | ( |  | ) |

Return the current logger instance.

Definition at line 337 of file PluginService.cpp.

337 { return *s_logger; }

void Gaudi::PluginService::Details::setLogger | ( | Logger * | logger | ) |

Set the logger instance to use.

It must be a new instance and the ownership is passed to the function.

Definition at line 338 of file PluginService.cpp.

338 { s_logger.reset(logger); }
Gaudi::PluginService::Details::logger
GAUDIPS_API Logger & logger()
Return the current logger instance.
Definition: PluginService.cpp:337