diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/astra/AstraObjectFactory.h | 7 | ||||
| -rw-r--r-- | include/astra/PluginAlgorithm.h | 57 | 
2 files changed, 21 insertions, 43 deletions
diff --git a/include/astra/AstraObjectFactory.h b/include/astra/AstraObjectFactory.h index 325989e..6af9cd8 100644 --- a/include/astra/AstraObjectFactory.h +++ b/include/astra/AstraObjectFactory.h @@ -155,8 +155,11 @@ class _AstraExport CAlgorithmFactory : public CAstraObjectFactory<CAlgorithm, Al  template <>  inline CAlgorithm* CAstraObjectFactory<CAlgorithm, AlgorithmTypeList>::findPlugin(std::string _sType)  	{ -		CPluginAlgorithmFactory *fac = CPluginAlgorithmFactory::getSingletonPtr(); -		return fac->getPlugin(_sType); +		CPluginAlgorithmFactory *fac = CPluginAlgorithmFactory::getFactory(); +		if (fac) +			return fac->getPlugin(_sType); +		else +			return 0;  	}  #endif diff --git a/include/astra/PluginAlgorithm.h b/include/astra/PluginAlgorithm.h index 667e813..cbd80fc 100644 --- a/include/astra/PluginAlgorithm.h +++ b/include/astra/PluginAlgorithm.h @@ -29,62 +29,37 @@ $Id$  #ifndef _INC_ASTRA_PLUGINALGORITHM  #define _INC_ASTRA_PLUGINALGORITHM -#ifdef ASTRA_PYTHON - -#include "astra/Algorithm.h" -#include "astra/Singleton.h" -#include "astra/XMLDocument.h" -#include "astra/XMLNode.h" - -// Slightly hackish forward declaration of PyObject -struct _object; -typedef _object PyObject; +#include "astra/Globals.h" +#include <map> +#include <string>  namespace astra { -class _AstraExport CPluginAlgorithm : public CAlgorithm { - -public: - -    CPluginAlgorithm(PyObject* pyclass); -    ~CPluginAlgorithm(); - -    bool initialize(const Config& _cfg); -    void run(int _iNrIterations); - -private: -    PyObject * instance; -}; +class CAlgorithm; -class _AstraExport CPluginAlgorithmFactory : public Singleton<CPluginAlgorithmFactory> { +class _AstraExport CPluginAlgorithmFactory {  public: +    CPluginAlgorithmFactory() { } +    virtual ~CPluginAlgorithmFactory() { } -    CPluginAlgorithmFactory(); -    ~CPluginAlgorithmFactory(); +    virtual CAlgorithm * getPlugin(const std::string &name) = 0; -    CPluginAlgorithm * getPlugin(std::string name); +    virtual bool registerPlugin(std::string name, std::string className) = 0; +    virtual bool registerPlugin(std::string className) = 0; -    bool registerPlugin(std::string name, std::string className); -    bool registerPlugin(std::string className); -    bool registerPluginClass(std::string name, PyObject * className); -    bool registerPluginClass(PyObject * className); +    virtual std::map<std::string, std::string> getRegisteredMap() = 0; -    PyObject * getRegistered(); -    std::map<std::string, std::string> getRegisteredMap(); -     -    std::string getHelp(std::string name); +    virtual std::string getHelp(const std::string &name) = 0; + +    static void registerFactory(CPluginAlgorithmFactory *factory) { m_factory = factory; } +	static CPluginAlgorithmFactory* getFactory() { return m_factory; }  private: -    PyObject * pluginDict; -    PyObject *inspect, *six; +    static CPluginAlgorithmFactory *m_factory;  }; -PyObject* XMLNode2dict(XMLNode node); -  }  #endif - -#endif  | 
