From 18b6d25f7e4f0943b3592f3bb4f6ca5ed9c285d3 Mon Sep 17 00:00:00 2001
From: "Daniel M. Pelt" <D.M.Pelt@cwi.nl>
Date: Fri, 19 Jun 2015 22:28:06 +0200
Subject: Add support for Python algorithm plugins

---
 include/astra/PluginAlgorithm.h | 85 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)
 create mode 100644 include/astra/PluginAlgorithm.h

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

diff --git a/include/astra/PluginAlgorithm.h b/include/astra/PluginAlgorithm.h
new file mode 100644
index 0000000..7d6c64a
--- /dev/null
+++ b/include/astra/PluginAlgorithm.h
@@ -0,0 +1,85 @@
+/*
+-----------------------------------------------------------------------
+Copyright: 2010-2015, iMinds-Vision Lab, University of Antwerp
+           2014-2015, CWI, Amsterdam
+
+Contact: astra@uantwerpen.be
+Website: http://sf.net/projects/astra-toolbox
+
+This file is part of the ASTRA Toolbox.
+
+
+The ASTRA Toolbox is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+The ASTRA Toolbox is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
+
+-----------------------------------------------------------------------
+$Id$
+*/
+
+#ifndef _INC_ASTRA_PLUGINALGORITHM
+#define _INC_ASTRA_PLUGINALGORITHM
+
+#ifdef ASTRA_PYTHON
+
+#include <Python.h>
+#include "bytesobject.h"
+#include "astra/Algorithm.h"
+#include "astra/Singleton.h"
+#include "astra/XMLDocument.h"
+#include "astra/XMLNode.h"
+
+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 _AstraExport CPluginAlgorithmFactory : public Singleton<CPluginAlgorithmFactory> {
+
+public:
+
+    CPluginAlgorithmFactory();
+    ~CPluginAlgorithmFactory();
+
+    CPluginAlgorithm * getPlugin(std::string name);
+
+    bool registerPlugin(std::string name, std::string className);
+    bool registerPluginClass(std::string name, PyObject * className);
+    
+    PyObject * getRegistered();
+    
+    std::string getHelp(std::string name);
+
+private:
+    PyObject * pluginDict;
+    PyObject *ospath, *inspect, *six, *astra;
+    std::vector<std::string> getPluginPathList();
+};
+
+PyObject* XMLNode2dict(XMLNode node);
+
+}
+
+#endif
+
+#endif
\ No newline at end of file
-- 
cgit v1.2.3


From 2f871bc7068d6c87a7d950ae044ba66b0b8dcd3f Mon Sep 17 00:00:00 2001
From: "Daniel M. Pelt" <D.M.Pelt@cwi.nl>
Date: Fri, 17 Jul 2015 12:05:46 +0200
Subject: Remove config text file loading for plugins

---
 include/astra/PluginAlgorithm.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

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

diff --git a/include/astra/PluginAlgorithm.h b/include/astra/PluginAlgorithm.h
index 7d6c64a..a82c579 100644
--- a/include/astra/PluginAlgorithm.h
+++ b/include/astra/PluginAlgorithm.h
@@ -72,8 +72,7 @@ public:
 
 private:
     PyObject * pluginDict;
-    PyObject *ospath, *inspect, *six, *astra;
-    std::vector<std::string> getPluginPathList();
+    PyObject *inspect, *six;
 };
 
 PyObject* XMLNode2dict(XMLNode node);
-- 
cgit v1.2.3


From d91b51f6d58003de84a9d6dd8189fceba0e81a5a Mon Sep 17 00:00:00 2001
From: "Daniel M. Pelt" <D.M.Pelt@cwi.nl>
Date: Mon, 20 Jul 2015 14:07:21 +0200
Subject: Allow registering plugins without explicit name, and fix exception
 handling when running in Matlab

---
 include/astra/PluginAlgorithm.h | 3 +++
 1 file changed, 3 insertions(+)

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

diff --git a/include/astra/PluginAlgorithm.h b/include/astra/PluginAlgorithm.h
index a82c579..b56228e 100644
--- a/include/astra/PluginAlgorithm.h
+++ b/include/astra/PluginAlgorithm.h
@@ -64,9 +64,12 @@ public:
     CPluginAlgorithm * getPlugin(std::string name);
 
     bool registerPlugin(std::string name, std::string className);
+    bool registerPlugin(std::string className);
     bool registerPluginClass(std::string name, PyObject * className);
+    bool registerPluginClass(PyObject * className);
     
     PyObject * getRegistered();
+    std::map<std::string, std::string> getRegisteredMap();
     
     std::string getHelp(std::string name);
 
-- 
cgit v1.2.3


From 07c31b932078544205d61551edd4a66f69be30ae Mon Sep 17 00:00:00 2001
From: Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>
Date: Wed, 2 Dec 2015 11:25:59 +0100
Subject: Avoid unnecessary include in header

---
 include/astra/PluginAlgorithm.h | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

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

diff --git a/include/astra/PluginAlgorithm.h b/include/astra/PluginAlgorithm.h
index b56228e..667e813 100644
--- a/include/astra/PluginAlgorithm.h
+++ b/include/astra/PluginAlgorithm.h
@@ -31,13 +31,16 @@ $Id$
 
 #ifdef ASTRA_PYTHON
 
-#include <Python.h>
-#include "bytesobject.h"
 #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;
+
+
 namespace astra {
 class _AstraExport CPluginAlgorithm : public CAlgorithm {
 
@@ -84,4 +87,4 @@ PyObject* XMLNode2dict(XMLNode node);
 
 #endif
 
-#endif
\ No newline at end of file
+#endif
-- 
cgit v1.2.3