gwnavruntime/math/box2iiterator.h Source File
9 #ifndef Navigation_Box2iIterator_H
10 #define Navigation_Box2iIterator_H
21 class Box2iRowMajorIterator
31 if (m_box !=
KY_NULL && box.IsValid())
38 KY_INLINE
bool operator==(
const Box2iRowMajorIterator& it)
const {
return m_box == it.m_box && m_currentIdx == it.m_currentIdx; }
39 KY_INLINE
bool operator!=(
const Box2iRowMajorIterator& it)
const {
return m_box != it.m_box || m_currentIdx != it.m_currentIdx; }
41 KY_INLINE Box2iRowMajorIterator& operator++()
43 if (IsFinished() ==
false)
45 if (m_pos.x < m_box->Max().x)
50 else if (m_pos.y < m_box->Max().y)
52 m_pos.x = m_box->Min().x;
64 KY_INLINE
bool IsFinished()
const {
return m_currentIdx < 0 || m_box ==
KY_NULL; }
66 KY_INLINE
KyInt32 GetRowMajorIndex()
const {
return m_currentIdx; }
67 KY_INLINE
const Vec2i& GetPos()
const {
return m_pos; }
100 class Box2iIteratorInBiggerRowMajorBox
104 m_innerBoxIdx(-1), m_outerBoxIdx(-1) {}
105 KY_INLINE Box2iIteratorInBiggerRowMajorBox(
const Box2i& innerBox,
const Box2i& outerBox) : m_innerBox(&innerBox), m_outerBox(&outerBox),
111 KY_INLINE
void Init()
113 if (m_innerBox !=
KY_NULL && m_outerBox !=
KY_NULL && m_innerBox->IsValid() && m_outerBox->IsValid())
115 KY_LOG_ERROR_IF(m_outerBox->IsInside(m_innerBox->Min()) ==
false || m_outerBox->IsInside(m_innerBox->Max()) ==
false ,
116 (
"Error in boxes provided for Box2iRowMajorIterator. the innerBox must be fully included in the outerBox"));
117 m_pos = m_innerBox->Min();
119 m_outerBoxIdx = m_outerBox->GetRowMajorIndex(m_pos);
123 KY_INLINE Box2iIteratorInBiggerRowMajorBox& operator++()
125 if (IsFinished() ==
false)
127 if (m_pos.x < m_innerBox->Max().x)
132 KY_ASSERT(m_outerBoxIdx == m_outerBox->GetRowMajorIndex(m_pos));
133 KY_ASSERT(m_innerBoxIdx == m_innerBox->GetRowMajorIndex(m_pos));
136 else if (m_pos.y < m_innerBox->Max().y)
138 m_pos.x = m_innerBox->Min().x;
141 m_outerBoxIdx += (m_outerBox->CountX() - m_innerBox->CountX()) + 1;
142 KY_ASSERT(m_outerBoxIdx == m_outerBox->GetRowMajorIndex(m_pos));
143 KY_ASSERT(m_innerBoxIdx == m_innerBox->GetRowMajorIndex(m_pos));
154 KY_INLINE
bool IsFinished()
const {
return m_innerBoxIdx < 0 || m_outerBoxIdx < 0 || m_innerBox ==
KY_NULL || m_outerBox ==
KY_NULL; }
156 KY_INLINE
KyInt32 GetInnerBoxRowMajorIndex()
const {
return m_innerBoxIdx; }
157 KY_INLINE
KyInt32 GetOuterBoxRowMajorIndex()
const {
return m_outerBoxIdx; }
158 KY_INLINE
const Vec2i& GetPos()
const {
return m_pos; }
161 const Box2i* m_innerBox;
162 const Box2i* m_outerBox;
int KyInt32
Type used internally to represent a 32-bit integer.
Definition: types.h:35
#define KY_NULL
Null value.
Definition: types.h:247
#define KyInt32MAXVAL
The maximum value that can be stored in the KyInt32 variable type.
Definition: types.h:224
Definition: gamekitcrowddispersion.h:20