Files Classes Functions Hierarchy
#include <treeindexedD2.h>
Public Member Functions | |
| boolc | isleaf () const |
| Is this a leaf node? | |
| boolc | isleft (INDX index2) const |
| Is the node left? | |
| boolc | isright (INDX index2) const |
| Is the node right? | |
| boolc | isleftinternal (INDX index2) const |
| Is left an internal node? | |
| boolc | isrightinternal (INDX index2) const |
| Is right an internal node? | |
| treeindexedD2node () | |
| Unconstructed, classed as a leaf. | |
| treeindexedD2node (INDX const index_) | |
| Construct a leaf. | |
| treeindexedD2node (treeindexedD2node *left_, treeindexedD2node *right_, INDX index_) | |
| Construct a node. | |
| ~treeindexedD2node () | |
| Memory cleanup if left and right are not zero. | |
| void | unlink () |
| Set the left and right pointers to zero recursively down the tree. | |
| operator stringc () const | |
| Serialize this object by writing it out as a string. | |
| void | printrecursive (string &s, INDX const parentindex, boolc branch) const |
| Write the tree out as a linear list of nodes, where each node refers to a previous node. | |
| void | swap () |
| Swap left and right. | |
| void | nodecount (INDX &n) |
| How many nodes are in the tree? | |
Public Attributes | |
| treeindexedD2node * | left |
| The left branch. | |
| treeindexedD2node * | right |
| The right branch. | |
| INDX | index |
| The index to either whats in a node or whats in a leaf. | |
Nodes and leafs indexed independently from each other. A zero index value is used for writing out the tree when there is no node on that branch.
The client can use the index as a pointer to the real data structure. The tree manages the nodes assuming that they were created with new.
There are deliberately no virtual functions. If a very (Designed for a large number of treeindexedD2node's. The cost is that leafs do not use left or right and nodes may or may not using index depending on the application.
Definition at line 117 of file treeindexedD2.h.
| treeindexedD2node< INDX >::treeindexedD2node | ( | ) | [inline] |
| treeindexedD2node< INDX >::treeindexedD2node | ( | INDX const | index_ | ) | [inline] |
| treeindexedD2node< INDX >::treeindexedD2node | ( | treeindexedD2node< INDX > * | left_, | |
| treeindexedD2node< INDX > * | right_, | |||
| INDX | index_ | |||
| ) | [inline] |
| treeindexedD2node< INDX >::~treeindexedD2node | ( | ) | [inline] |
Memory cleanup if left and right are not zero.
Definition at line 676 of file treeindexedD2.h.
References treeindexedD2node< INDX >::left, and treeindexedD2node< INDX >::right.
| boolc treeindexedD2node< INDX >::isleaf | ( | ) | const [inline] |
Is this a leaf node?
Definition at line 698 of file treeindexedD2.h.
References treeindexedD2node< INDX >::left, and treeindexedD2node< INDX >::right.
Referenced by treeindexedD2< INDX >::insert(), treeindexedD2node< INDX >::isleftinternal(), treeindexedD2node< INDX >::isrightinternal(), treeindexedD2node< INDX >::nodecount(), treeindexedD2iter< T >::operator++(), and bsptreeD2< PT, PD, INDX >::serializeInverse().
| boolc treeindexedD2node< INDX >::isleft | ( | INDX | index2 | ) | const [inline] |
Is the node left?
Definition at line 705 of file treeindexedD2.h.
References treeindexedD2node< INDX >::index, and treeindexedD2node< INDX >::left.
00706 { 00707 if (left==0) return false; 00708 if (left->index==index2) return true; 00709 return false; 00710 }
| boolc treeindexedD2node< INDX >::isleftinternal | ( | INDX | index2 | ) | const [inline] |
Is left an internal node?
Definition at line 721 of file treeindexedD2.h.
References treeindexedD2node< INDX >::index, treeindexedD2node< INDX >::isleaf(), and treeindexedD2node< INDX >::left.
00722 { 00723 if (left==0) return false; 00724 if (left->index!=index2) return false; 00725 if (left->isleaf()) return false; 00726 return true; 00727 }
| boolc treeindexedD2node< INDX >::isright | ( | INDX | index2 | ) | const [inline] |
Is the node right?
Definition at line 713 of file treeindexedD2.h.
References treeindexedD2node< INDX >::index, and treeindexedD2node< INDX >::right.
00714 { 00715 if (right==0) return false; 00716 if (right->index==index2) return true; 00717 return false; 00718 }
| boolc treeindexedD2node< INDX >::isrightinternal | ( | INDX | index2 | ) | const [inline] |
Is right an internal node?
Definition at line 730 of file treeindexedD2.h.
References treeindexedD2node< INDX >::index, treeindexedD2node< INDX >::isleaf(), and treeindexedD2node< INDX >::right.
00731 { 00732 if (right==0) return false; 00733 if (right->index!=index2) return false; 00734 if (right->isleaf()) return false; 00735 return true; 00736 }
| void treeindexedD2node< INDX >::nodecount | ( | INDX & | n | ) | [inline] |
How many nodes are in the tree?
Definition at line 639 of file treeindexedD2.h.
References treeindexedD2node< INDX >::isleaf(), treeindexedD2node< INDX >::left, treeindexedD2node< INDX >::nodecount(), and treeindexedD2node< INDX >::right.
Referenced by treeindexedD2node< INDX >::nodecount().
00640 { 00641 if (isleaf()) 00642 return; 00643 00644 ++n; 00645 if (left!=0) 00646 left->nodecount(n); 00647 if (right!=0) 00648 right->nodecount(n); 00649 }
| treeindexedD2node< INDX >::operator stringc | ( | ) | const [inline] |
Serialize this object by writing it out as a string.
Definition at line 568 of file treeindexedD2.h.
References treeindexedD2node< INDX >::index, treeindexedD2node< INDX >::left, and treeindexedD2node< INDX >::right.
00569 { 00570 stringstream ss; 00571 ss << index << " "; 00572 if (left) 00573 { 00574 ss << left->index; 00575 00576 if (right) 00577 { 00578 ss << " " << right->index; 00579 } 00580 else 00581 { 00582 ss << " 0"; 00583 } 00584 } 00585 else 00586 { 00587 ss << "0 "; 00588 if (right) 00589 { 00590 ss << " " << right->index; 00591 } 00592 else 00593 { 00594 ss << " 0"; 00595 } 00596 } 00597 00598 return ss.str(); 00599 }
| void treeindexedD2node< INDX >::printrecursive | ( | string & | s, | |
| INDX const | parentindex, | |||
| boolc | branch | |||
| ) | const [inline] |
Write the tree out as a linear list of nodes, where each node refers to a previous node.
For uniques then parents branch that points to this node is needed.
Definition at line 603 of file treeindexedD2.h.
00608 { 00609 s += (stringc)*this; 00610 00611 { 00612 stringstream ss; 00613 ss << parentindex; 00614 00615 s += " "; 00616 s += ss.str(); 00617 } 00618 00619 if (branch==false) 00620 s += " 0"; 00621 else 00622 s += " 1"; 00623 00624 if ((left!=0)||(right!=0)) 00625 s += '\n'; 00626 if (left!=0) 00627 { 00628 if (left->isleaf()==false) 00629 left->printrecursive(s,index,false); 00630 } 00631 if (right!=0) 00632 { 00633 if (right->isleaf()==false) 00634 right->printrecursive(s,index,true); 00635 } 00636 }
| void treeindexedD2node< INDX >::swap | ( | ) | [inline] |
Swap left and right.
Definition at line 686 of file treeindexedD2.h.
References treeindexedD2node< INDX >::left, and treeindexedD2node< INDX >::right.
00687 { 00688 treeindexedD2node * tmp=left; 00689 right=left; 00690 left=tmp; 00691 }
| void treeindexedD2node< INDX >::unlink | ( | ) | [inline] |
Set the left and right pointers to zero recursively down the tree.
Definition at line 550 of file treeindexedD2.h.
References treeindexedD2node< INDX >::left, treeindexedD2node< INDX >::right, and treeindexedD2node< INDX >::unlink().
Referenced by treeindexedD2node< INDX >::unlink().
00551 { 00552 treeindexedD2node<INDX> * p; 00553 p = left; 00554 if (left!=0) 00555 { 00556 left=0; 00557 p->unlink(); 00558 } 00559 p = right; 00560 if (right!=0) 00561 { 00562 right=0; 00563 p->unlink(); 00564 } 00565 }
| INDX treeindexedD2node< INDX >::index |
The index to either whats in a node or whats in a leaf.
Definition at line 126 of file treeindexedD2.h.
Referenced by treeindexedD2< INDX >::insert(), treeindexedD2node< INDX >::isleft(), treeindexedD2node< INDX >::isleftinternal(), treeindexedD2node< INDX >::isright(), treeindexedD2node< INDX >::isrightinternal(), treeindexedD2node< INDX >::operator stringc(), and bsptreeD2< PT, PD, INDX >::serializeInverse().
| treeindexedD2node* treeindexedD2node< INDX >::left |
The left branch.
Definition at line 122 of file treeindexedD2.h.
Referenced by treeindexedD2< INDX >::insert(), treeindexedD2node< INDX >::isleaf(), treeindexedD2node< INDX >::isleft(), treeindexedD2node< INDX >::isleftinternal(), treeindexedD2node< INDX >::nodecount(), treeindexedD2node< INDX >::operator stringc(), treeindexedD2iter< T >::operator++(), bsptreeD2< PT, PD, INDX >::serializeInverse(), treeindexedD2node< INDX >::swap(), treeindexedD2node< INDX >::unlink(), and treeindexedD2node< INDX >::~treeindexedD2node().
| treeindexedD2node* treeindexedD2node< INDX >::right |
The right branch.
Definition at line 124 of file treeindexedD2.h.
Referenced by treeindexedD2< INDX >::insert(), treeindexedD2node< INDX >::isleaf(), treeindexedD2node< INDX >::isright(), treeindexedD2node< INDX >::isrightinternal(), treeindexedD2node< INDX >::nodecount(), treeindexedD2node< INDX >::operator stringc(), treeindexedD2iter< T >::operator++(), bsptreeD2< PT, PD, INDX >::serializeInverse(), treeindexedD2node< INDX >::swap(), treeindexedD2node< INDX >::unlink(), and treeindexedD2node< INDX >::~treeindexedD2node().
1.5.8