From dbde097547ca348d4501294946210d292fa883b5 Mon Sep 17 00:00:00 2001 From: David Williams Date: Sun, 14 Mar 2010 21:31:17 +0000 Subject: [PATCH] Work on Arrays. --- library/PolyVoxCore/CMakeLists.txt | 2 +- library/PolyVoxCore/include/Array.h | 91 +++++++++++++++++-- .../include/PolyVoxForwardDeclarations.h | 31 ++++++- library/PolyVoxCore/source/Array.cpp | 24 ----- 4 files changed, 114 insertions(+), 34 deletions(-) delete mode 100644 library/PolyVoxCore/source/Array.cpp diff --git a/library/PolyVoxCore/CMakeLists.txt b/library/PolyVoxCore/CMakeLists.txt index 536e75d9..016ae6c4 100644 --- a/library/PolyVoxCore/CMakeLists.txt +++ b/library/PolyVoxCore/CMakeLists.txt @@ -4,7 +4,6 @@ PROJECT(PolyVoxCore) #Projects source files SET(CORE_SRC_FILES - source/Array.cpp source/GradientEstimators.cpp source/SurfaceMesh.cpp source/Log.cpp @@ -21,6 +20,7 @@ SET(CORE_SRC_FILES #Projects headers files SET(CORE_INC_FILES include/Array.h + include/Array.inl include/GradientEstimators.inl include/SurfaceMesh.h include/Log.h diff --git a/library/PolyVoxCore/include/Array.h b/library/PolyVoxCore/include/Array.h index e3eeaf57..331ebd61 100644 --- a/library/PolyVoxCore/include/Array.h +++ b/library/PolyVoxCore/include/Array.h @@ -33,18 +33,27 @@ freely, subject to the following restrictions: namespace PolyVox { - template - class POLYVOXCORE_API Array2D + template + class POLYVOXCORE_API Array { public: - Array2D() + Array() :m_uWidth(0) ,m_uHeight(0) ,m_pData(0) { } - Array2D(uint32_t width, uint32_t height) + Array(uint32_t width) + :m_uWidth(width) + ,m_uHeight(0) + ,m_pData(0) + { + m_pData = new ElementType[width]; + assert(m_pData); + } + + Array(uint32_t width, uint32_t height) :m_uWidth(width) ,m_uHeight(height) ,m_pData(0) @@ -61,13 +70,13 @@ namespace PolyVox *this = rhs; }*/ - ~Array2D() + ~Array() { - /*if(m_pData) + if(m_pData) { delete[] m_pData; } - m_pData = 0;*/ + m_pData = 0; } /*Array2D& operator=(const Array2D& rhs) @@ -109,6 +118,12 @@ namespace PolyVox return m_pData[x * m_uWidth + y]; }*/ + ElementType& getElement(uint32_t x) const + { + assert(x < m_uWidth); + return m_pData[x]; + } + ElementType& getElement(uint32_t x, uint32_t y) const { assert(x < m_uWidth); @@ -116,6 +131,12 @@ namespace PolyVox return m_pData[x + y * m_uWidth]; } + void setElement(uint32_t x, ElementType value) + { + assert(x < m_uWidth); + m_pData[x] = value; + } + void setElement(uint32_t x, uint32_t y, ElementType value) { assert(x < m_uWidth); @@ -123,7 +144,7 @@ namespace PolyVox m_pData[x + y * m_uWidth] = value; } - void swap(Array2D& rhs) + void swap(Array& rhs) { assert(m_uWidth == rhs.m_uWidth); assert(m_uHeight == rhs.m_uHeight); @@ -141,6 +162,60 @@ namespace PolyVox //Data ElementType* m_pData; }; + + //Some handy typedefs + ///A 1D Array of floats. + typedef Array<1,float> Array1DFloat; + ///A 1D Array of doubles. + typedef Array<1,double> Array1DDouble; + ///A 1D Array of signed 8-bit values. + typedef Array<1,int8_t> Array1DInt8; + ///A 1D Array of unsigned 8-bit values. + typedef Array<1,uint8_t> Array1DUint8; + ///A 1D Array of signed 16-bit values. + typedef Array<1,int16_t> Array1DInt16; + ///A 1D Array of unsigned 16-bit values. + typedef Array<1,uint16_t> Array1DUint16; + ///A 1D Array of signed 32-bit values. + typedef Array<1,int32_t> Array1DInt32; + ///A 1D Array of unsigned 32-bit values. + typedef Array<1,uint32_t> Array1DUint32; + + ///A 2D Array of floats. + typedef Array<2,float> Array2DFloat; + ///A 2D Array of doubles. + typedef Array<2,double> Array2DDouble; + ///A 2D Array of signed 8-bit values. + typedef Array<2,int8_t> Array2DInt8; + ///A 2D Array of unsigned 8-bit values. + typedef Array<2,uint8_t> Array2DUint8; + ///A 2D Array of signed 16-bit values. + typedef Array<2,int16_t> Array2DInt16; + ///A 2D Array of unsigned 16-bit values. + typedef Array<2,uint16_t> Array2DUint16; + ///A 2D Array of signed 32-bit values. + typedef Array<2,int32_t> Array2DInt32; + ///A 2D Array of unsigned 32-bit values. + typedef Array<2,uint32_t> Array2DUint32; + + ///A 3D Array of floats. + typedef Array<3,float> Array3DFloat; + ///A 3D Array of doubles. + typedef Array<3,double> Array3DDouble; + ///A 3D Array of signed 8-bit values. + typedef Array<3,int8_t> Array3DInt8; + ///A 3D Array of unsigned 8-bit values. + typedef Array<3,uint8_t> Array3DUint8; + ///A 3D Array of signed 16-bit values. + typedef Array<3,int16_t> Array3DInt16; + ///A 3D Array of unsigned 16-bit values. + typedef Array<3,uint16_t> Array3DUint16; + ///A 3D Array of signed 32-bit values. + typedef Array<3,int32_t> Array3DInt32; + ///A 3D Array of unsigned 32-bit values. + typedef Array<3,uint32_t> Array3DUint32; }//namespace Thermite +#include "Array.inl" + #endif \ No newline at end of file diff --git a/library/PolyVoxCore/include/PolyVoxForwardDeclarations.h b/library/PolyVoxCore/include/PolyVoxForwardDeclarations.h index d75e28d3..1e8b4cca 100644 --- a/library/PolyVoxCore/include/PolyVoxForwardDeclarations.h +++ b/library/PolyVoxCore/include/PolyVoxForwardDeclarations.h @@ -30,7 +30,36 @@ freely, subject to the following restrictions: namespace PolyVox { - template class Array2D; + //---------- Array ---------- + template class Array; + typedef Array<1,float> Array1DFloat; + typedef Array<1,double> Array1DDouble; + typedef Array<1,int8_t> Array1DInt8; + typedef Array<1,uint8_t> Array1DUint8; + typedef Array<1,int16_t> Array1DInt16; + typedef Array<1,uint16_t> Array1DUint16; + typedef Array<1,int32_t> Array1DInt32; + typedef Array<1,uint32_t> Array1DUint32; + + typedef Array<2,float> Array2DFloat; + typedef Array<2,double> Array2DDouble; + typedef Array<2,int8_t> Array2DInt8; + typedef Array<2,uint8_t> Array2DUint8; + typedef Array<2,int16_t> Array2DInt16; + typedef Array<2,uint16_t> Array2DUint16; + typedef Array<2,int32_t> Array2DInt32; + typedef Array<2,uint32_t> Array2DUint32; + + typedef Array<3,float> Array3DFloat; + typedef Array<3,double> Array3DDouble; + typedef Array<3,int8_t> Array3DInt8; + typedef Array<3,uint8_t> Array3DUint8; + typedef Array<3,int16_t> Array3DInt16; + typedef Array<3,uint16_t> Array3DUint16; + typedef Array<3,int32_t> Array3DInt32; + typedef Array<3,uint32_t> Array3DUint32; + //--------------------------------- + template class Block; //---------- Volume ---------- diff --git a/library/PolyVoxCore/source/Array.cpp b/library/PolyVoxCore/source/Array.cpp deleted file mode 100644 index cebc930a..00000000 --- a/library/PolyVoxCore/source/Array.cpp +++ /dev/null @@ -1,24 +0,0 @@ -/******************************************************************************* -Copyright (c) 2005-2009 David Williams - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*******************************************************************************/ - -#include "Array.h" \ No newline at end of file