summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2014-10-07 21:17:25 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2014-10-07 21:17:25 +0200
commit48fece09164ce52753579a7225bc471d1fa44dea (patch)
tree23790ae58f8bfdb823518e4bc50df242f0e5a528
parentcc6e599a52b3a062e62eb1a225c603f105e95f04 (diff)
downloadcrawler-48fece09164ce52753579a7225bc471d1fa44dea.tar.gz
crawler-48fece09164ce52753579a7225bc471d1fa44dea.tar.bz2
fighting with some visiblity of symbols
-rwxr-xr-xinclude/module/ModuleLoader.hpp21
-rwxr-xr-xinclude/module/ModuleRegistry.hpp30
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