Engineering Details 3
enum Flags
{
ZERO = 0x00 , DEAD = 0x01, RED = 0x02 , LEFT_THREAD = 0x04 , RIGHT_THREAD = 0x08
};
struct Node
{
...
void Dump (std::ostream& os = std::cout) const
{
os << " Node data:\n"
<< " value: " << value_ << '\n'
<< " color: " << (size_t)IsRed() << '\n'
<< " alive: " << (size_t)IsAlive() << '\n'
<< " left_threaded: " << (size_t)IsLeftThreaded() << '\n'
<< " right_threaded: " << (size_t)IsRightThreaded() << '\n';
os << " lchild: ";
if (lchild_ != nullptr)
{
if (IsLeftThreaded())
os << lchild_->value_ << " (predecessor)\n";
else
os << lchild_->value_ << " (left child)\n";
}
else
os << "NULL\n";
os << " rchild: ";
if (rchild_ != nullptr)
{
if (IsRightThreaded())
os << rchild_->value_ << " (succecessor)\n";
else
os << rchild_->value_ << " (right child)\n";
}
else
os << "NULL\n";
os << std::flush;
}
}; // struct BST_BASE<T,P>::Node
For obscure reasons, ANSI color codes offset characters slightly, so
"blue is the new black" in our demos.