diff --git a/library/PolyVoxCore/include/PolyVoxCore/IteratorController.h b/library/PolyVoxCore/include/PolyVoxCore/IteratorController.h new file mode 100644 index 00000000..527263eb --- /dev/null +++ b/library/PolyVoxCore/include/PolyVoxCore/IteratorController.h @@ -0,0 +1,44 @@ +/******************************************************************************* +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. +*******************************************************************************/ + +#ifndef __PolyVox_IteratorController_H__ +#define __PolyVox_IteratorController_H__ + +namespace PolyVox +{ + template + class IteratorController + { + public: + void reset(void); + bool moveForward(void); + + public: + Region m_regValid; + IteratorType* m_Iter; + }; +} + +#include "PolyVoxCore/IteratorController.inl" + +#endif //__PolyVox_IteratorController_H__ diff --git a/library/PolyVoxCore/include/PolyVoxCore/IteratorController.inl b/library/PolyVoxCore/include/PolyVoxCore/IteratorController.inl new file mode 100644 index 00000000..82fbdd08 --- /dev/null +++ b/library/PolyVoxCore/include/PolyVoxCore/IteratorController.inl @@ -0,0 +1,63 @@ +/******************************************************************************* +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. +*******************************************************************************/ + +namespace PolyVox +{ + template + void IteratorController::reset(void) + { + m_Iter->setPosition(m_regValid.getLowerCorner()); + } + + template + bool IteratorController::moveForward(void) + { + Vector3DInt32 v3dInitialPosition(m_Iter->getPosX(), m_Iter->getPosY(), m_Iter->getPosZ()); + + if(v3dInitialPosition.getX() < m_regValid.getUpperCorner().getX()) + { + m_Iter->movePositiveX(); + return true; + } + + v3dInitialPosition.setX(m_regValid.getLowerCorner().getX()); + + if(v3dInitialPosition.getY() < m_regValid.getUpperCorner().getY()) + { + v3dInitialPosition.setY(v3dInitialPosition.getY() + 1); + m_Iter->setPosition(v3dInitialPosition); + return true; + } + + v3dInitialPosition.setY(m_regValid.getLowerCorner().getY()); + + if(v3dInitialPosition.getZ() < m_regValid.getUpperCorner().getZ()) + { + v3dInitialPosition.setZ(v3dInitialPosition.getZ() + 1); + m_Iter->setPosition(v3dInitialPosition); + return true; + } + + return false; + } +}