From b4324c3d3ee5e27c271a4965680d3bf1fee81827 Mon Sep 17 00:00:00 2001
From: Willem Jan Palenstijn <WillemJan.Palenstijn@uantwerpen.be>
Date: Tue, 22 Apr 2014 14:15:59 +0000
Subject: Add CustomMemory interface to Float32Data2D

---
 include/astra/Float32Data2D.h | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

(limited to 'include/astra')

diff --git a/include/astra/Float32Data2D.h b/include/astra/Float32Data2D.h
index 062feb5..c5d2c70 100644
--- a/include/astra/Float32Data2D.h
+++ b/include/astra/Float32Data2D.h
@@ -34,6 +34,13 @@ $Id$
 
 namespace astra {
 
+
+class _AstraExport CFloat32CustomMemory {
+public:
+	virtual ~CFloat32CustomMemory()=0;
+	float32* m_fPtr;
+};
+
 /** 
  * This class represents a two-dimensional block of float32ing point data.
  * It contains member functions for accessing this data and for performing 
@@ -141,6 +148,23 @@ protected:
 	 */
 	bool _initialize(int _iWidth, int _iHeight, float32 _fScalar);
 
+	/** Initialization. Initializes an instance of the CFloat32Data2D class with pre-allocated memory.
+	 * Can only be called by derived classes.
+	 *
+	 * Initializes an instance of the CFloat32Data2D class. Memory 
+	 * is pre-allocated and passed via the abstract CFloat32CustomMemory handle
+	 * class. The handle will be deleted when the memory can be freed.
+	 * You should override the destructor to provide custom behaviour on free.
+	 * If the object has been initialized before, the 
+	 * object is reinitialized and memory is freed and reallocated if necessary.
+	 * This function does not set m_bInitialized to true if everything is ok.
+	 *
+	 * @param _iWidth width of the 2D data (x-axis), must be > 0
+	 * @param _iHeight height of the 2D data (y-axis), must be > 0 
+	 * @param _pfData pointer to a one-dimensional float32 data block
+	 */
+	bool _initialize(int _iWidth, int _iHeight, CFloat32CustomMemory* _pCustomMemory);
+
 	/** Constructor. Create an instance of the CFloat32Data2D class without initializing the data block.
 	 * Can only be called by derived classes.
 	 *
@@ -180,6 +204,21 @@ protected:
 	 */
 	CFloat32Data2D(int _iWidth, int _iHeight, float32 _fScalar);
 
+	/** Constructor. Create an instance of the CFloat32Data2D class with pre-allocated memory.
+
+	 * Can only be called by derived classes.
+	 *
+	 * Creates an instance of the CFloat32Data2D class. Memory 
+	 * is pre-allocated and passed via the abstract CFloat32CustomMemory handle
+	 * class. The handle will be deleted when the memory can be freed.
+	 * You should override the destructor to provide custom behaviour on free.
+	 *
+	 * @param _iWidth width of the 2D data (x-axis), must be > 0
+	 * @param _iHeight height of the 2D data (y-axis), must be > 0 
+	 * @param _pfData pointer to a one-dimensional float32 data block
+	 */
+	CFloat32Data2D(int _iWidth, int _iHeight, CFloat32CustomMemory* _pCustomMemory);
+
 	/** Copy constructor.
 	 */
 	CFloat32Data2D(const CFloat32Data2D&);
@@ -418,6 +457,9 @@ public:
 
 	float32& getData(int _index);
 
+
+private:
+	CFloat32CustomMemory* m_pCustomMemory;
 };
 
 
-- 
cgit v1.2.3