TapestryEngine

A 2D Platformer Game Engine
Log | Files | Refs

afc83b06f97ba7704a514122d1661abcdb97c478.svn-base (1688B)


      1 #include "BinaryTree.h"
      2 
      3 bool Node::Insert(int i, void* data)
      4 {
      5 	if (mActive == false)
      6 	{
      7 		PopulateNode(i, data);
      8 	}
      9 	else //mActive == true
     10 	{
     11 			 if (i < mItem) { mLeft->Insert(i, data); }
     12 		else if (mItem < i) { mRight->Insert(i, data); }
     13 		else// i==mItem this should never happen
     14 		{
     15 			//error
     16 			return false;
     17 		}
     18 	}
     19 	return true;
     20 }
     21 
     22 Node* Node::Search(int i)
     23 {
     24 	if (mActive == false)// target value not found
     25 	{
     26 		return NULL;
     27 	}
     28 		 if (i < mItem) { return mLeft->Search(i); }
     29 	else if (mItem < i) { return mRight->Search(i); }
     30 	else// i==mItem
     31 	{
     32 		return this;
     33 	}
     34 }
     35 
     36 bool Node::InsertNode(Node* n)
     37 {
     38 	n->mActive = false;
     39 	if (mActive == false)
     40 	{
     41 		mActive = true;
     42 	
     43 		mItem  = n->mItem;
     44 		mData = n->GetData();
     45 
     46 		if (n->mLeft->IsActive())  { InsertNodeAtRoot(n->mLeft); }
     47 		if (n->mRight->IsActive()) { InsertNodeAtRoot(n->mRight); }
     48 
     49 		return true;
     50 	}
     51 	else //mActive == true
     52 	{
     53 			 if (n->mItem < mItem) { mLeft->InsertNode(n); }
     54 		else if (mItem < n->mItem) { mRight->InsertNode(n); }
     55 		else// i==mItem this should never happen
     56 		{
     57 			//error
     58 			return false;
     59 		}
     60 		return true;
     61 	}
     62 }
     63 
     64 bool Node::InsertNodeAtRoot(Node* n)
     65 {
     66 	n->mActive = false;
     67 	if (mParent != NULL)
     68 	{
     69 		return mParent->InsertNodeAtRoot(n);
     70 	}
     71 	else
     72 	{
     73 		bool r = InsertNode(n);
     74 		//n->Delete();
     75 		return r;
     76 	}
     77 }
     78 
     79 void Node::Delete()
     80 {
     81 	mActive = false;
     82 
     83 	InsertNodeAtRoot(mLeft);
     84 	InsertNodeAtRoot(mRight);
     85 }
     86 
     87 bool Node::DisableTree()
     88 {
     89 	return false;
     90 }
     91 
     92 void Node::PopulateNode(int item, void* data) //Should only be called by inactive nodes
     93 {
     94 	if (mActive == false)
     95 	{
     96 		mItem = item;
     97 		mData = data;
     98 
     99 		mLeft  = new Node(this);
    100 		mRight = new Node(this);
    101 
    102 		mActive = true;
    103 	}
    104 	else
    105 	{
    106 		//error
    107 	}
    108 }