Engineering Details 1
Add one byte to node for various flags: red/black, alive/dead plus room for
6 more
enum Flags
{
ZERO = 0x00 , DEAD = 0x01, RED = 0x02 , LEFT_THREAD = 0x04 , RIGHT_THREAD = 0x08
};
struct Node
{
T value_;
Node * lchild_,
* rchild_;
uint8_t flags_;
Node (const T& tval, uint8_t flags) : value_(tval), lchild_(nullptr), rchild_(nullptr), flags_(flags)
{}
static const char* ColorMap (uint8_t flags)
{
flags &= 0x03; // last 2 bits only
switch(flags)
{
case 0x00: return ANSI_BOLD_BLUE; // bits 00 = !RED | ALIVE
case 0x01: return ANSI_BOLD_BLUE_SHADED; // bits 01 = !RED | !ALIVE
case 0x02: return ANSI_BOLD_RED; // bits 10 = RED | ALIVE
case 0x03: return ANSI_BOLD_RED_SHADED; // bits 11 = RED | !ALIVE
default: return "unknown color"; // unknown flags
}
}
// support for Erase
...
// support for color management
...
// support for search
...
// support for threaded iterators
...
// node dump - may be used during development
...
}; // struct BST_BASE<T,P>::Node