From 33cf693ac82ef7d70299afa1b69c21573103494b Mon Sep 17 00:00:00 2001 From: David Williams Date: Sun, 14 Mar 2010 20:40:52 +0000 Subject: [PATCH] Added new 'Array' class for supporting multidimensional arrays. --- library/PolyVoxCore/CMakeLists.txt | 2 + library/PolyVoxCore/include/Array.h | 146 ++++++++++++++++++ .../include/PolyVoxForwardDeclarations.h | 1 + library/PolyVoxCore/source/Array.cpp | 24 +++ 4 files changed, 173 insertions(+) create mode 100644 library/PolyVoxCore/include/Array.h create mode 100644 library/PolyVoxCore/source/Array.cpp diff --git a/library/PolyVoxCore/CMakeLists.txt b/library/PolyVoxCore/CMakeLists.txt index 442f91ca..536e75d9 100644 --- a/library/PolyVoxCore/CMakeLists.txt +++ b/library/PolyVoxCore/CMakeLists.txt @@ -4,6 +4,7 @@ PROJECT(PolyVoxCore) #Projects source files SET(CORE_SRC_FILES + source/Array.cpp source/GradientEstimators.cpp source/SurfaceMesh.cpp source/Log.cpp @@ -19,6 +20,7 @@ SET(CORE_SRC_FILES #Projects headers files SET(CORE_INC_FILES + include/Array.h include/GradientEstimators.inl include/SurfaceMesh.h include/Log.h diff --git a/library/PolyVoxCore/include/Array.h b/library/PolyVoxCore/include/Array.h new file mode 100644 index 00000000..e3eeaf57 --- /dev/null +++ b/library/PolyVoxCore/include/Array.h @@ -0,0 +1,146 @@ +#pragma region License +/******************************************************************************* +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. +*******************************************************************************/ +#pragma endregion + +#ifndef __PolyVox_Array_H__ +#define __PolyVox_Array_H__ + +#pragma region Headers +#include "PolyVoxImpl/TypeDef.h" +#include "PolyVoxImpl/CPlusPlusZeroXSupport.h" +#pragma endregion + +namespace PolyVox +{ + template + class POLYVOXCORE_API Array2D + { + public: + Array2D() + :m_uWidth(0) + ,m_uHeight(0) + ,m_pData(0) + { + } + + Array2D(uint32_t width, uint32_t height) + :m_uWidth(width) + ,m_uHeight(height) + ,m_pData(0) + { + m_pData = new ElementType[width * height]; + assert(m_pData); + } + + /*Array2D(const Array2D& rhs) + :m_uWidth(0) + ,m_uHeight(0) + ,m_pData(0) + { + *this = rhs; + }*/ + + ~Array2D() + { + /*if(m_pData) + { + delete[] m_pData; + } + m_pData = 0;*/ + } + + /*Array2D& operator=(const Array2D& rhs) + { + if(this == &rhs) + { + return *this; + } + + if((m_uWidth != rhs.m_uWidth) || (m_uHeight != rhs.m_uHeight)) + { + if(m_pData) + { + delete m_pData; + } + m_pData = 0; + + m_uWidth = rhs.m_uWidth; + m_uHeight = rhs.m_uHeight; + + m_pData = new ElementType[m_uWidth * m_uHeight]; + } + + std::memcpy(m_pData, rhs.m_pData, sizeof(ElementType) * m_uWidth * m_uHeight); + return *this; + }*/ + + /*ElementType& operator() (uint32_t x, uint32_t y) + { + assert(x < m_uWidth); + assert(y < m_uHeight); + return m_pData[x * m_uWidth + y]; + } + + ElementType operator() (uint32_t x, uint32_t y) const + { + assert(x < m_uWidth); + assert(y < m_uHeight); + return m_pData[x * m_uWidth + y]; + }*/ + + ElementType& getElement(uint32_t x, uint32_t y) const + { + assert(x < m_uWidth); + assert(y < m_uHeight); + return m_pData[x + y * m_uWidth]; + } + + void setElement(uint32_t x, uint32_t y, ElementType value) + { + assert(x < m_uWidth); + assert(y < m_uHeight); + m_pData[x + y * m_uWidth] = value; + } + + void swap(Array2D& rhs) + { + assert(m_uWidth == rhs.m_uWidth); + assert(m_uHeight == rhs.m_uHeight); + + ElementType* temp = m_pData; + m_pData = rhs.m_pData; + rhs.m_pData = temp; + } + + private: + //Dimensions + uint32_t m_uWidth; + uint32_t m_uHeight; + + //Data + ElementType* m_pData; + }; +}//namespace Thermite + +#endif \ No newline at end of file diff --git a/library/PolyVoxCore/include/PolyVoxForwardDeclarations.h b/library/PolyVoxCore/include/PolyVoxForwardDeclarations.h index 5d558b77..d75e28d3 100644 --- a/library/PolyVoxCore/include/PolyVoxForwardDeclarations.h +++ b/library/PolyVoxCore/include/PolyVoxForwardDeclarations.h @@ -30,6 +30,7 @@ freely, subject to the following restrictions: namespace PolyVox { + template class Array2D; template class Block; //---------- Volume ---------- diff --git a/library/PolyVoxCore/source/Array.cpp b/library/PolyVoxCore/source/Array.cpp new file mode 100644 index 00000000..cebc930a --- /dev/null +++ b/library/PolyVoxCore/source/Array.cpp @@ -0,0 +1,24 @@ +/******************************************************************************* +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