diff --git a/library/PolyVoxCore/include/ArraySizes.inl b/library/PolyVoxCore/include/ArraySizes.inl new file mode 100644 index 00000000..f700dde6 --- /dev/null +++ b/library/PolyVoxCore/include/ArraySizes.inl @@ -0,0 +1,55 @@ +#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 + +namespace PolyVox +{ + /** + \param uSize The size of the first dimension. + */ + ArraySizes::ArraySizes(uint32_t uSize) + { + m_pSizes[0]=uSize; + } + + /** + This class only directly implements one dimensional sizes. Higher numbers + of dimensions are implemented via the ArraySisesImpl class. This function + create an object of the next dimensionality up. + \param uSize The size of the next dimension. + \return A higher dimension version of this class. + */ + ArraySizesImpl<2> ArraySizes::operator () (uint32_t uSize) + { + return ArraySizesImpl<2>(m_pSizes, uSize); + } + + /** + \return The array of integers corresponding to this object. + */ + ArraySizes::operator UIntArray1 () const + { + return m_pSizes; + } +} \ No newline at end of file diff --git a/library/PolyVoxCore/include/PolyVoxImpl/ArraySizesImpl.h b/library/PolyVoxCore/include/PolyVoxImpl/ArraySizesImpl.h new file mode 100644 index 00000000..7a155ca2 --- /dev/null +++ b/library/PolyVoxCore/include/PolyVoxImpl/ArraySizesImpl.h @@ -0,0 +1,57 @@ +#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_ArraySizesImpl_H__ +#define __PolyVox_ArraySizesImpl_H__ + +#pragma region Headers +#include "PolyVoxImpl/CPlusPlusZeroXSupport.h" +#pragma endregion + +namespace PolyVox +{ + template + class ArraySizesImpl + { + typedef const uint32_t (&UIntArrayN)[N]; + + friend class ArraySizes; + friend class ArraySizesImpl; + + public: + ArraySizesImpl operator () (uint32_t uSize); + + operator UIntArrayN () const; + + private: + ArraySizesImpl(const uint32_t (&pSizes)[N-1], uint32_t uSize); + + uint32_t m_pSizes[N]; + }; +}//namespace PolyVox + +#include "ArraySizesImpl.inl" + +#endif //__PolyVox_ArraySizesImpl_H__ \ No newline at end of file diff --git a/library/PolyVoxCore/include/PolyVoxImpl/ArraySizesImpl.inl b/library/PolyVoxCore/include/PolyVoxImpl/ArraySizesImpl.inl new file mode 100644 index 00000000..168d8ad3 --- /dev/null +++ b/library/PolyVoxCore/include/PolyVoxImpl/ArraySizesImpl.inl @@ -0,0 +1,46 @@ +#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 + +namespace PolyVox +{ + template + ArraySizesImpl ArraySizesImpl::operator () (uint32_t uSize) + { + return ArraySizesImpl(m_pSizes, uSize); + } + + template + ArraySizesImpl::operator UIntArrayN () const + { + return m_pSizes; + } + + template + ArraySizesImpl::ArraySizesImpl(const uint32_t (&pSizes)[N-1], uint32_t uSize) + { + std::copy(&pSizes[0],&pSizes[N-1],m_pSizes); + m_pSizes[N-1]=uSize; + } +}//namespace PolyVox \ No newline at end of file diff --git a/tests/TestArray.cpp b/tests/TestArray.cpp index a0bb72d4..fae1bea6 100644 --- a/tests/TestArray.cpp +++ b/tests/TestArray.cpp @@ -1,39 +1,39 @@ -/******************************************************************************* -Copyright (c) 2010 Matt 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 "TestArray.h" - -#include - -#include - -using namespace PolyVox; - -void TestArray::testReadWrite() -{ - int width = 5; - int height = 10; - int depth = 20; +/******************************************************************************* +Copyright (c) 2010 Matt 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 "TestArray.h" + +#include + +#include + +using namespace PolyVox; + +void TestArray::testReadWrite() +{ + int width = 5; + int height = 10; + int depth = 20; Array<3, int> myArray(ArraySizes(width)(height)(depth)); @@ -65,18 +65,18 @@ void TestArray::testReadWrite() ct++; } } - } - - QCOMPARE(total, expectedTotal); - - /*const PolyVox::uint16_t g_uVolumeSideLength = 128; - Volume volData(g_uVolumeSideLength, g_uVolumeSideLength, g_uVolumeSideLength); - - volData.tidyUpMemory(0); - - QCOMPARE(volData.getWidth(), g_uVolumeSideLength); - QCOMPARE(volData.getHeight(), g_uVolumeSideLength); - QCOMPARE(volData.getDepth(), g_uVolumeSideLength);*/ -} - -QTEST_MAIN(TestArray) + } + + QCOMPARE(total, expectedTotal); + + /*const PolyVox::uint16_t g_uVolumeSideLength = 128; + Volume volData(g_uVolumeSideLength, g_uVolumeSideLength, g_uVolumeSideLength); + + volData.tidyUpMemory(0); + + QCOMPARE(volData.getWidth(), g_uVolumeSideLength); + QCOMPARE(volData.getHeight(), g_uVolumeSideLength); + QCOMPARE(volData.getDepth(), g_uVolumeSideLength);*/ +} + +QTEST_MAIN(TestArray)