HPL1: fix const correctness in dgTree

This commit is contained in:
grisenti 2022-12-17 16:05:33 +01:00 committed by Eugene Sandulenko
parent 99f161cdcd
commit 71607c5efb
No known key found for this signature in database
GPG Key ID: 014D387312D34F08
2 changed files with 58 additions and 12 deletions

View File

@ -22,26 +22,26 @@
#include "dgStdafx.h"
#include "dgTree.h"
dgRedBackNode *dgRedBackNode::Minimum() const {
dgRedBackNode *ptr = (dgRedBackNode *) this;
const dgRedBackNode *dgRedBackNode::Minimum() const {
const dgRedBackNode *ptr = this;
for (; ptr->m_left; ptr = ptr->m_left) {
}
return ptr;
}
dgRedBackNode *dgRedBackNode::Maximum() const {
dgRedBackNode *ptr = (dgRedBackNode *) this;
const dgRedBackNode *dgRedBackNode::Maximum() const {
const dgRedBackNode *ptr = this;
for (; ptr->m_right; ptr = ptr->m_right) {
}
return ptr;
}
dgRedBackNode *dgRedBackNode::Prev() const {
const dgRedBackNode *dgRedBackNode::Prev() const {
if (m_left) {
return m_left->Maximum();
}
dgRedBackNode *node = (dgRedBackNode *) this;
const dgRedBackNode *node = this;
dgRedBackNode *ptr = m_parent;
for (; ptr && node == ptr->m_left; ptr = ptr->m_parent) {
node = ptr;
@ -50,13 +50,55 @@ dgRedBackNode *dgRedBackNode::Prev() const {
}
dgRedBackNode *dgRedBackNode::Next() const {
const dgRedBackNode *dgRedBackNode::Next() const {
if (m_right) {
return m_right->Minimum();
}
dgRedBackNode *node = (dgRedBackNode *) this;
const dgRedBackNode *node = this;
dgRedBackNode *ptr = m_parent;
for (; ptr && node == ptr->m_right; ptr = ptr->m_parent) {
node = ptr;
}
return ptr;
}
dgRedBackNode *dgRedBackNode::Minimum() {
dgRedBackNode *ptr = this;
for (; ptr->m_left; ptr = ptr->m_left) {
}
return ptr;
}
dgRedBackNode *dgRedBackNode::Maximum() {
dgRedBackNode *ptr = this;
for (; ptr->m_right; ptr = ptr->m_right) {
}
return ptr;
}
dgRedBackNode *dgRedBackNode::Prev() {
if (m_left) {
return m_left->Maximum();
}
dgRedBackNode *node = this;
dgRedBackNode *ptr = m_parent;
for (; ptr && node == ptr->m_left; ptr = ptr->m_parent) {
node = ptr;
}
return ptr;
}
dgRedBackNode *dgRedBackNode::Next() {
if (m_right) {
return m_right->Minimum();
}
dgRedBackNode *node = this;
dgRedBackNode *ptr = m_parent;
for (; ptr && node == ptr->m_right; ptr = ptr->m_parent) {
node = ptr;

View File

@ -64,10 +64,14 @@ public:
inline void SetInTreeFlag(dgUnsigned32 flag);
void RemoveAll();
dgRedBackNode *Prev() const;
dgRedBackNode *Next() const;
dgRedBackNode *Minimum() const;
dgRedBackNode *Maximum() const;
const dgRedBackNode *Prev() const;
const dgRedBackNode *Next() const;
const dgRedBackNode *Minimum() const;
const dgRedBackNode *Maximum() const;
dgRedBackNode *Prev();
dgRedBackNode *Next();
dgRedBackNode *Minimum();
dgRedBackNode *Maximum();
void Remove(dgRedBackNode **const head);
void Unlink(dgRedBackNode **const head);
void InsertFixup(dgRedBackNode **const head);