X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FInterface.h;h=22d48110b123e5d6f5ecbb7597fd370b485c6f0c;hb=00d030e4e10fea579b427297027e3ac37ff960b6;hp=7c860db3b584e81f6d2d8208a931a5d14c6f3ff2;hpb=1b0022070ff3b5f80f6f8c8b87f73032f5685eaf;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface.h b/lib/cpPlugins/Interface.h index 7c860db..22d4811 100644 --- a/lib/cpPlugins/Interface.h +++ b/lib/cpPlugins/Interface.h @@ -4,6 +4,7 @@ #include #include #include +#include #include namespace cpPlugins @@ -13,8 +14,14 @@ namespace cpPlugins class cpPlugins_EXPORT Interface { public: - typedef std::map< std::string, std::string > TStringRow; - typedef std::map< std::string, TStringRow > TFilters; + typedef Interface Self; + + typedef void* ( *TCreator )( ); + typedef std::pair< std::string, TCreator > TDynFunc; + typedef std::map< std::string, TDynFunc > TDynFilter; + typedef std::map< std::string, TDynFilter > TDynFilters; + typedef std::map< std::string, void* > TDynLibraries; + typedef std::map< std::string, std::set< std::string > > TFilters; public: Interface( ); @@ -22,7 +29,12 @@ namespace cpPlugins const TFilters& GetFilters( ); + void GuessAccesiblePlugins( ); + + bool LoadConfiguration( const std::string& filename ); + bool SaveConfiguration( const std::string& filename ) const; void LoadPluginFile( const std::string& filename ); + unsigned int LoadPluginDir( const std::string& dirname ); void UnloadAll( ); cpPlugins::ProcessObject::Pointer Create( @@ -30,8 +42,17 @@ namespace cpPlugins ); protected: - std::map< std::string, void* > m_Plugins; - TFilters m_Filters; + static void* _DLOpen( const std::string& fname ); + static TFilters _DLGetFilters( void* hnd ); + static TCreator _DLGetCreator( + void* hnd, const std::string& category, const std::string& name + ); + static void _DLClose( void* hnd ); + + protected: + TDynLibraries m_DynLibraries; + TDynFilters m_DynFilters; + TFilters m_Filters; }; } // ecapseman