From 56809b0359af7e9108adeb1fd21823a225edf6fa Mon Sep 17 00:00:00 2001
From: Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>
Date: Wed, 20 Jan 2016 18:08:59 +0100
Subject: Remove dependency of libastra on libpython by refactoring
 PluginAlgorithm

---
 include/astra/PluginAlgorithm.h | 57 ++++++++++++-----------------------------
 1 file changed, 16 insertions(+), 41 deletions(-)

(limited to 'include/astra/PluginAlgorithm.h')

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
-- 
cgit v1.2.3