Skip to content

Commit 0947425

Browse files
scturtlefincs
authored andcommitted
graphics/deko3d: fix and simplify rbtree code
1 parent b55cb17 commit 0947425

2 files changed

Lines changed: 7 additions & 27 deletions

File tree

graphics/deko3d/deko_examples/source/SampleFramework/CIntrusiveTree.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ void CIntrusiveTreeBase::remove(N* node)
192192
}
193193
else
194194
{
195-
child = node->left() ? node->right() : node->left();
195+
child = node->left() ? node->left() : node->right();
196196
parent = node->getParent();
197197
color = node->getColor();
198198

graphics/deko3d/deko_examples/source/SampleFramework/CIntrusiveTree.h

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ class CIntrusiveTree final : protected CIntrusiveTreeBase
173173

174174
T* first() const { return toType(minmax(N::Left)); }
175175
T* last() const { return toType(minmax(N::Right)); }
176-
bool empty() const { return m_root != nullptr; }
176+
bool empty() const { return m_root == nullptr; }
177177
void clear() { m_root = nullptr; }
178178

179179
T* prev(T* node) const { return toType(walk(toNode(node), N::Left)); }
@@ -194,31 +194,11 @@ class CIntrusiveTree final : protected CIntrusiveTreeBase
194194
mode != UpperBound ? N::Left : N::Right,
195195
[&lambda](N* curnode) { return lambda(toType(curnode)); });
196196

197-
switch (mode)
198-
{
199-
default:
200-
case Exact:
201-
break;
202-
case LowerBound:
203-
if (!node && parent)
204-
{
205-
if (&parent->left() == &point)
206-
node = parent;
207-
else
208-
node = walk(parent, N::Right);
209-
}
210-
break;
211-
case UpperBound:
212-
if (node)
213-
node = walk(node, N::Right);
214-
else if (parent)
215-
{
216-
if (&parent->right() == &point)
217-
node = walk(parent, N::Right);
218-
else
219-
node = parent;
220-
}
221-
break;
197+
if (mode != Exact) {
198+
if (mode == UpperBound && node)
199+
node = walk(node, N::Right);
200+
else if (!node && parent)
201+
node = &parent->left() == &point ? parent : walk(parent, N::Right);
222202
}
223203
return toType(node);
224204
}

0 commit comments

Comments
 (0)