]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/Interface.cxx
Garbage collector added
[cpPlugins.git] / lib / cpPlugins / Interface / Interface.cxx
1 #include <cpPlugins/Interface/Interface.h>
2
3 // -------------------------------------------------------------------------
4 cpPlugins::Interface::Interface::
5 Interface( )
6 {
7   this->m_Pluma.acceptProviderType< ObjectProvider >( );
8 }
9
10 // -------------------------------------------------------------------------
11 cpPlugins::Interface::Interface::
12 ~Interface( )
13 {
14   this->UnloadAll( );
15 }
16
17 // -------------------------------------------------------------------------
18 cpPlugins::Interface::Interface::
19 TClasses& cpPlugins::Interface::Interface::
20 GetClasses( )
21 {
22   return( this->m_Classes );
23 }
24
25 // -------------------------------------------------------------------------
26 const cpPlugins::Interface::Interface::
27 TClasses& cpPlugins::Interface::Interface::
28 GetClasses( ) const
29 {
30   return( this->m_Classes );
31 }
32
33 // -------------------------------------------------------------------------
34 cpPlugins::Interface::Object::Pointer cpPlugins::Interface::Interface::
35 CreateObject( const std::string& name ) const
36 {
37   TClassesIterator cIt = this->m_Classes.find( name );
38   if( cIt != this->m_Classes.end( ) )
39   {
40     ObjectProvider* provider =
41       dynamic_cast< ObjectProvider* >( this->m_Providers[ cIt->second ] );
42     if( provider != NULL )
43       return( provider->create( ) );
44
45   } // fi
46   return( NULL );
47 }
48
49 // -------------------------------------------------------------------------
50 cpPlugins::Interface::ProcessObject::Pointer
51 cpPlugins::Interface::Interface::
52 CreateProcessObject( const std::string& name ) const
53 {
54   cpPlugins::Interface::Object::Pointer o = this->CreateObject( name );
55   cpPlugins::Interface::ProcessObject::Pointer p =
56     dynamic_cast< cpPlugins::Interface::ProcessObject* >( o.GetPointer( ) );
57   return( p );
58 }
59
60 // -------------------------------------------------------------------------
61 bool cpPlugins::Interface::Interface::
62 Load( const std::string& path )
63 {
64   if( this->m_Pluma.load( path ) )
65   {
66     this->_LoadClasses( );
67     return( true );
68   }
69   else
70     return( false );
71 }
72
73 // -------------------------------------------------------------------------
74 bool cpPlugins::Interface::Interface::
75 Load( const std::string& folder, const std::string& name )
76 {
77   if( this->m_Pluma.load( folder, name ) )
78   {
79     this->_LoadClasses( );
80     return( true );
81   }
82   else
83     return( false );
84 }
85
86 // -------------------------------------------------------------------------
87 int cpPlugins::Interface::Interface::
88 LoadFromFolder( const std::string& folder, bool r )
89 {
90   if( this->m_Pluma.loadFromFolder( folder, r ) )
91   {
92     this->_LoadClasses( );
93     return( true );
94   }
95   else
96     return( false );
97 }
98
99 // -------------------------------------------------------------------------
100 bool cpPlugins::Interface::Interface::
101 Unload( const std::string& name )
102 {
103   if( this->m_Pluma.unload( name ) )
104   {
105     this->m_Providers.clear( );
106     this->m_Classes.clear( );
107     this->_LoadClasses( );
108     return( true );
109   }
110   else
111     return( false );
112 }
113
114 // -------------------------------------------------------------------------
115 void cpPlugins::Interface::Interface::
116 UnloadAll( )
117 {
118   this->m_Pluma.unloadAll( );
119   this->m_Providers.clear( );
120   this->m_Classes.clear( );
121 }
122
123 // -------------------------------------------------------------------------
124 void cpPlugins::Interface::Interface::
125 GetLoadedPlugins( std::vector< const std::string* >& names ) const
126 {
127   this->m_Pluma.getLoadedPlugins( names );
128 }
129
130 // -------------------------------------------------------------------------
131 bool cpPlugins::Interface::Interface::
132 IsLoaded( const std::string& name ) const
133 {
134   return( this->m_Pluma.isLoaded( name ) );
135 }
136
137 // -------------------------------------------------------------------------
138 void cpPlugins::Interface::Interface::
139 _LoadClasses( )
140 {
141   this->m_Providers.clear( );
142   this->m_Classes.clear( );
143   this->m_Pluma.getProviders( this->m_Providers );
144
145   // Get reader provider
146   for( unsigned int i = 0; i < this->m_Providers.size( ); ++i )
147   {
148     Object::Pointer dummy = this->m_Providers[ i ]->create( );
149     this->m_Classes[ dummy->GetClassName( ) ] = i;
150
151   } // rof
152 }
153
154 // eof - $RCSfile$