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/AstraObjectFactory.h |  7 +++--
 include/astra/PluginAlgorithm.h    | 57 +++++++++++---------------------------
 2 files changed, 21 insertions(+), 43 deletions(-)

(limited to 'include/astra')

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


From 838cfae58d825fb8915dc7d3c974d96e6a4f981c Mon Sep 17 00:00:00 2001
From: Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>
Date: Fri, 12 Feb 2016 16:27:08 +0100
Subject: Also split volumes in X/Y directions to respect CUDA limits

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

(limited to 'include/astra')

diff --git a/include/astra/CompositeGeometryManager.h b/include/astra/CompositeGeometryManager.h
index 4338994..18dd72f 100644
--- a/include/astra/CompositeGeometryManager.h
+++ b/include/astra/CompositeGeometryManager.h
@@ -79,7 +79,9 @@ public:
 
 		bool uploadToGPU();
 		bool downloadFromGPU(/*mode?*/);
-		virtual TPartList split(size_t maxSize, int div) = 0;
+		virtual void splitX(TPartList& out, size_t maxSize, size_t maxDim, int div) = 0;
+		virtual void splitY(TPartList& out, size_t maxSize, size_t maxDim, int div) = 0;
+		virtual void splitZ(TPartList& out, size_t maxSize, size_t maxDim, int div) = 0;
 		virtual CPart* reduce(const CPart *other) = 0;
 		virtual void getDims(size_t &x, size_t &y, size_t &z) = 0;
 		size_t getSize();
@@ -93,7 +95,9 @@ public:
 
 		CVolumeGeometry3D* pGeom;
 
-		virtual TPartList split(size_t maxSize, int div);
+		virtual void splitX(TPartList& out, size_t maxSize, size_t maxDim, int div);
+		virtual void splitY(TPartList& out, size_t maxSize, size_t maxDim, int div);
+		virtual void splitZ(TPartList& out, size_t maxSize, size_t maxDim, int div);
 		virtual CPart* reduce(const CPart *other);
 		virtual void getDims(size_t &x, size_t &y, size_t &z);
 
@@ -107,7 +111,9 @@ public:
 
 		CProjectionGeometry3D* pGeom;
 
-		virtual TPartList split(size_t maxSize, int div);
+		virtual void splitX(TPartList& out, size_t maxSize, size_t maxDim, int div);
+		virtual void splitY(TPartList& out, size_t maxSize, size_t maxDim, int div);
+		virtual void splitZ(TPartList& out, size_t maxSize, size_t maxDim, int div);
 		virtual CPart* reduce(const CPart *other);
 		virtual void getDims(size_t &x, size_t &y, size_t &z);
 
-- 
cgit v1.2.3