diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2014-10-07 21:17:25 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2014-10-07 21:17:25 +0200 |
commit | 48fece09164ce52753579a7225bc471d1fa44dea (patch) | |
tree | 23790ae58f8bfdb823518e4bc50df242f0e5a528 /include | |
parent | cc6e599a52b3a062e62eb1a225c603f105e95f04 (diff) | |
download | crawler-48fece09164ce52753579a7225bc471d1fa44dea.tar.gz crawler-48fece09164ce52753579a7225bc471d1fa44dea.tar.bz2 |
fighting with some visiblity of symbols
Diffstat (limited to 'include')
-rwxr-xr-x | include/module/ModuleLoader.hpp | 21 | ||||
-rwxr-xr-x | 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<std::string> files, void *user_data = 0 ) - { - Module< Interface, CtorParams> m; - + { for( std::vector<std::string>::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<baseClass, TYPELIST_4( T1, T2, T3, T4 )> registry ## _ ## baseCla #define DECLARE_MODULE_4( baseClass, T1, T2, T3, T4 ) #define REGISTER_MODULE( name, initModule, destroyModule, baseClass, subClass ) \ -ModuleRegistry<baseClass> registry ## _ ## baseClass( name, initModule, destroyModule, 0, 0 ); +ModuleRegistry<baseClass> registry ## _ ## baseClass ## _ ## subClass( name, initModule, destroyModule, 0, 0 ); #define REGISTER_MODULE_1( name, initModule, destroyModule, baseClass, subClass, T1 ) \ -ModuleRegistry<baseClass, TYPELIST_1( T1 )> registry ## _ ## baseClass( name, initModule, destroyModule, 0, 0 ); +ModuleRegistry<baseClass, TYPELIST_1( T1 )> registry ## _ ## baseClass ## _ ## subClass( name, initModule, destroyModule, 0, 0 ); #define REGISTER_MODULE_2( name, initModule, destroyModule, baseClass, subClass, T1, T2 ) \ -ModuleRegistry<baseClass, TYPELIST_2( T1, T2 )> registry ## _ ## baseClass( name, initModule, destroyModule, 0, 0 ); +ModuleRegistry<baseClass, TYPELIST_2( T1, T2 )> registry ## _ ## baseClass ## _ ## subClass( name, initModule, destroyModule, 0, 0 ); #define REGISTER_MODULE_3( name, initModule, destroyModule, baseClass, subClass, T1, T2, T3 ) \ -ModuleRegistry<baseClass, TYPELIST_3( T1, T2, T3 )> registry ## _ ## baseClass( name, initModule, destroyModule, 0, 0 ); +ModuleRegistry<baseClass, TYPELIST_3( T1, T2, T3 )> registry ## _ ## baseClass ## _ ## subClass( name, initModule, destroyModule, 0, 0 ); #define REGISTER_MODULE_4( name, initModule, destroyModule, baseClass, subClass, T1, T2, T3, T4 ) \ -ModuleRegistry<baseClass, TYPELIST_4( T1, T2, T3, T4 )> registry ## _ ## baseClass( name, initModule, destroyModule, 0, 0 ); +ModuleRegistry<baseClass, TYPELIST_4( T1, T2, T3, T4 )> registry ## _ ## baseClass ## _ ## subClass( name, initModule, destroyModule, 0, 0 ); #endif // SHARED |