From 48fece09164ce52753579a7225bc471d1fa44dea Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Tue, 7 Oct 2014 21:17:25 +0200 Subject: fighting with some visiblity of symbols --- include/module/ModuleLoader.hpp | 21 ++++++++++++++++----- include/module/ModuleRegistry.hpp | 30 +++++++++++++++--------------- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/include/module/ModuleLoader.hpp b/include/module/ModuleLoader.hpp index 045383f..2ae8421 100755 --- a/include/module/ModuleLoader.hpp +++ b/include/module/ModuleLoader.hpp @@ -30,6 +30,17 @@ struct Module { #endif void *user_data; ModuleRegistry< Interface, CtorParams > *registry; + + Module( ) : handle( 0 ), user_data( 0 ), registry( 0 ) {} + + Module( const Module &m ) : handle( m.handle ), user_data( m.user_data ), + registry( m.registry ) {} + + Module &operator=( Module m ) { + handle = m.handle; + user_data = m.user_data; + registry = m.registry; + } }; template< typename Interface, typename CtorParams = NullType > @@ -46,12 +57,12 @@ class BaseModuleLoader { public: BaseModuleLoader( const std::vector files, void *user_data = 0 ) - { - Module< Interface, CtorParams> m; - + { for( std::vector::const_iterator it = files.begin( ); it != files.end( ); it++ ) { + + Module< Interface, CtorParams> m; #ifndef _WIN32 - m.handle = dlopen( it->c_str( ), RTLD_NOW | RTLD_GLOBAL ); + m.handle = dlopen( it->c_str( ), RTLD_NOW | RTLD_LOCAL ); #else m.handle = LoadLibrary( it->c_str( ) ); #endif @@ -87,7 +98,7 @@ class BaseModuleLoader { m.user_data = user_data; - m_modules.insert( std::make_pair( m.registry->name, m ) ); + m_modules.insert( std::make_pair( std::string( m.registry->name ), m ) ); } } diff --git a/include/module/ModuleRegistry.hpp b/include/module/ModuleRegistry.hpp index 058aa24..1c27a3b 100755 --- a/include/module/ModuleRegistry.hpp +++ b/include/module/ModuleRegistry.hpp @@ -10,13 +10,13 @@ struct ModuleRegistry; template< typename Interface> struct ModuleRegistry< Interface > { - std::string name; + const char *name; void (*initModule)( void *user_data ); void (*destroyModule)( void *user_data ); Interface *(*create)( ); void (*destroy)( Interface *obj ); - ModuleRegistry( std::string _name, + ModuleRegistry( const char *_name, void (*_initModule)( void *user_data ), void (*_destroyModule)( void *user_data ), Interface *(*_create)( ), @@ -30,13 +30,13 @@ struct ModuleRegistry< Interface > { template< typename Interface, typename P1 > struct ModuleRegistry< Interface, TYPELIST_1( P1 ) > { - std::string name; + const char *name; void (*initModule)( void *user_data ); void (*destroyModule)( void *user_data ); Interface *(*create)( P1 ); void (*destroy)( Interface *obj ); - ModuleRegistry( std::string _name, + ModuleRegistry( const char *_name, void (*_initModule)( void *user_data ), void (*_destroyModule)( void *user_data ), Interface *(*_create)( P1 ), @@ -50,13 +50,13 @@ struct ModuleRegistry< Interface, TYPELIST_1( P1 ) > { template< typename Interface, typename P1, typename P2 > struct ModuleRegistry< Interface, TYPELIST_2( P1, P2 ) > { - std::string name; + const char *name; void (*initModule)( void *user_data ); void (*destroyModule)( void *user_data ); Interface *(*create)( P1, P2 ); void (*destroy)( Interface *obj ); - ModuleRegistry( std::string _name, + ModuleRegistry( const char *_name, void (*_initModule)( void *user_data ), void (*_destroyModule)( void *user_data ), Interface *(*_create)( P1, P2 ), @@ -70,13 +70,13 @@ struct ModuleRegistry< Interface, TYPELIST_2( P1, P2 ) > { template< typename Interface, typename P1, typename P2, typename P3 > struct ModuleRegistry< Interface, TYPELIST_3( P1, P2, P3 ) > { - std::string name; + const char *name; void (*initModule)( void *user_data ); void (*destroyModule)( void *user_data ); Interface *(*create)( P1, P2, P3 ); void (*destroy)( Interface *obj ); - ModuleRegistry( std::string _name, + ModuleRegistry( const char *_name, void (*_initModule)( void *user_data ), void (*_destroyModule)( void *user_data ), Interface *(*_create)( P1, P2, P3 ), @@ -90,13 +90,13 @@ struct ModuleRegistry< Interface, TYPELIST_3( P1, P2, P3 ) > { template< typename Interface, typename P1, typename P2, typename P3, typename P4 > struct ModuleRegistry< Interface, TYPELIST_4( P1, P2, P3, P4 ) > { - std::string name; + const char *name; void (*initModule)( void *user_data ); void (*destroyModule)( void *user_data ); Interface *(*create)( P1, P2, P3, P4 ); void (*destroy)( Interface *obj ); - ModuleRegistry( std::string _name, + ModuleRegistry( const char *_name, void (*_initModule)( void *user_data ), void (*_destroyModule)( void *user_data ), Interface *(*_create)( P1, P2, P3, P4 ), @@ -215,19 +215,19 @@ ModuleRegistry registry ## _ ## baseCla #define DECLARE_MODULE_4( baseClass, T1, T2, T3, T4 ) #define REGISTER_MODULE( name, initModule, destroyModule, baseClass, subClass ) \ -ModuleRegistry registry ## _ ## baseClass( name, initModule, destroyModule, 0, 0 ); +ModuleRegistry registry ## _ ## baseClass ## _ ## subClass( name, initModule, destroyModule, 0, 0 ); #define REGISTER_MODULE_1( name, initModule, destroyModule, baseClass, subClass, T1 ) \ -ModuleRegistry registry ## _ ## baseClass( name, initModule, destroyModule, 0, 0 ); +ModuleRegistry registry ## _ ## baseClass ## _ ## subClass( name, initModule, destroyModule, 0, 0 ); #define REGISTER_MODULE_2( name, initModule, destroyModule, baseClass, subClass, T1, T2 ) \ -ModuleRegistry registry ## _ ## baseClass( name, initModule, destroyModule, 0, 0 ); +ModuleRegistry registry ## _ ## baseClass ## _ ## subClass( name, initModule, destroyModule, 0, 0 ); #define REGISTER_MODULE_3( name, initModule, destroyModule, baseClass, subClass, T1, T2, T3 ) \ -ModuleRegistry registry ## _ ## baseClass( name, initModule, destroyModule, 0, 0 ); +ModuleRegistry registry ## _ ## baseClass ## _ ## subClass( name, initModule, destroyModule, 0, 0 ); #define REGISTER_MODULE_4( name, initModule, destroyModule, baseClass, subClass, T1, T2, T3, T4 ) \ -ModuleRegistry registry ## _ ## baseClass( name, initModule, destroyModule, 0, 0 ); +ModuleRegistry registry ## _ ## baseClass ## _ ## subClass( name, initModule, destroyModule, 0, 0 ); #endif // SHARED -- cgit v1.2.3-54-g00ecf