#include // ------------------------------------------------------------------------- cpPlugins::Interface::Interface:: Interface( ) { this->m_Pluma.acceptProviderType< ObjectProvider >( ); } // ------------------------------------------------------------------------- cpPlugins::Interface::Interface:: ~Interface( ) { this->UnloadAll( ); } // ------------------------------------------------------------------------- cpPlugins::Interface::Interface:: TClasses& cpPlugins::Interface::Interface:: GetClasses( ) { return( this->m_Classes ); } // ------------------------------------------------------------------------- const cpPlugins::Interface::Interface:: TClasses& cpPlugins::Interface::Interface:: GetClasses( ) const { return( this->m_Classes ); } // ------------------------------------------------------------------------- cpPlugins::Interface::Object::Pointer cpPlugins::Interface::Interface:: CreateObject( const std::string& name ) const { TClassesIterator cIt = this->m_Classes.find( name ); if( cIt != this->m_Classes.end( ) ) { ObjectProvider* provider = dynamic_cast< ObjectProvider* >( this->m_Providers[ cIt->second ] ); if( provider != NULL ) return( provider->create( ) ); } // fi return( NULL ); } // ------------------------------------------------------------------------- cpPlugins::Interface::ProcessObject::Pointer cpPlugins::Interface::Interface:: CreateProcessObject( const std::string& name ) const { cpPlugins::Interface::Object::Pointer o = this->CreateObject( name ); cpPlugins::Interface::ProcessObject::Pointer p = dynamic_cast< cpPlugins::Interface::ProcessObject* >( o.GetPointer( ) ); return( p ); } // ------------------------------------------------------------------------- bool cpPlugins::Interface::Interface:: Load( const std::string& path ) { bool ret = true; try { ret = this->m_Pluma.load( path ); if( ret ) this->_LoadClasses( ); } catch( ... ) { ret = false; } // yrt return( ret ); } // ------------------------------------------------------------------------- bool cpPlugins::Interface::Interface:: Load( const std::string& folder, const std::string& name ) { bool ret = true; try { ret = this->m_Pluma.load( folder, name ); if( ret ) this->_LoadClasses( ); } catch( ... ) { ret = false; } // yrt return( ret ); } // ------------------------------------------------------------------------- int cpPlugins::Interface::Interface:: LoadFromFolder( const std::string& folder, bool r ) { bool ret = true; try { ret = this->m_Pluma.loadFromFolder( folder, r ); if( ret ) this->_LoadClasses( ); } catch( ... ) { ret = false; } // yrt return( ret ); } // ------------------------------------------------------------------------- bool cpPlugins::Interface::Interface:: Unload( const std::string& name ) { bool ret = true; try { ret = this->m_Pluma.unload( name ); if( ret ) { this->m_Providers.clear( ); this->m_Classes.clear( ); this->_LoadClasses( ); } // fi } catch( ... ) { ret = false; } // yrt return( ret ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::Interface:: UnloadAll( ) { try { this->m_Pluma.unloadAll( ); } catch( ... ) { // Do nothing } // yrt this->m_Providers.clear( ); this->m_Classes.clear( ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::Interface:: GetLoadedPlugins( std::vector< const std::string* >& names ) const { this->m_Pluma.getLoadedPlugins( names ); } // ------------------------------------------------------------------------- bool cpPlugins::Interface::Interface:: IsLoaded( const std::string& name ) const { return( this->m_Pluma.isLoaded( name ) ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::Interface:: _LoadClasses( ) { this->m_Providers.clear( ); this->m_Classes.clear( ); this->m_Pluma.getProviders( this->m_Providers ); // Get reader provider for( unsigned int i = 0; i < this->m_Providers.size( ); ++i ) { Object::Pointer dummy = this->m_Providers[ i ]->create( ); this->m_Classes[ dummy->GetClassName( ) ] = i; } // rof } // eof - $RCSfile$