User Manual, Developers Guide and API Documentation

BinaryTree.hpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002  * This file is part of openWNS (open Wireless Network Simulator)
00003  * _____________________________________________________________________________
00004  *
00005  * Copyright (C) 2004-2007
00006  * Chair of Communication Networks (ComNets)
00007  * Kopernikusstr. 16, D-52074 Aachen, Germany
00008  * phone: ++49-241-80-27910,
00009  * fax: ++49-241-80-22242
00010  * email: info@openwns.org
00011  * www: http://www.openwns.org
00012  * _____________________________________________________________________________
00013  *
00014  * openWNS is free software; you can redistribute it and/or modify it under the
00015  * terms of the GNU Lesser General Public License version 2 as published by the
00016  * Free Software Foundation;
00017  *
00018  * openWNS is distributed in the hope that it will be useful, but WITHOUT ANY
00019  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
00020  * A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
00021  * details.
00022  *
00023  * You should have received a copy of the GNU Lesser General Public License
00024  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00025  *
00026  ******************************************************************************/
00027 
00028 #ifndef WNS_CONTAINER_BINARYTREE_HPP
00029 #define WNS_CONTAINER_BINARYTREE_HPP
00030 
00031 #include <WNS/container/Tree.hpp>
00032 #include <WNS/Assure.hpp>
00033 
00034 #include <vector>
00035 
00036 namespace wns { namespace container {
00037 
00038     template<typename ValueType, typename CleanupStrategy = tree::NoneOnErase>
00039     class BinaryTree :
00040     public Tree<ValueType, CleanupStrategy>
00041     {
00042     typedef Tree<ValueType, CleanupStrategy> Super;
00043     public:
00044     typedef ValueType Value;
00045     typedef typename Super::Size Size;
00046 
00047     BinaryTree(const Value& value = Value())
00048         : Super(value), tree(2)
00049     {}
00050 
00051     virtual ~BinaryTree()
00052     {
00053         for (typename std::vector<BinaryTree*>::size_type i = 0; i < 2; ++i)
00054         if (tree[i] != NULL) delete tree[i];
00055     }
00056 
00057     virtual Size getNoOfSubtrees() const
00058     { 
00059         return 2;
00060     }
00061     
00062     virtual void createSubTree(const Size& no, const Value& value)
00063     {
00064         setSubTree(tree[no], new BinaryTree(value));
00065     }
00066 
00067     virtual void linkSubTree(const Size& no, Super* subTree)
00068     {
00069         setSubTree(tree[no], dynamic_cast<BinaryTree*>(subTree));
00070     }
00071 
00072     virtual bool hasSubTree(const Size& no)
00073     {
00074         return getSubTree(no) != NULL;
00075     }
00076 
00077     virtual BinaryTree* getSubTree(const Size& no)
00078     {
00079         return tree[no];
00080     }
00081 
00082     virtual const BinaryTree *const getSubTree(const Size& no) const
00083     {
00084         return tree[no];
00085     }
00086 
00087     private:
00088 
00089     void setSubTree(BinaryTree*& tree, BinaryTree* newTree)
00090     {
00091         if (tree != NULL) delete tree;
00092         tree = newTree;
00093         tree->father = this;
00094     }
00095 
00096     std::vector<BinaryTree*> tree;
00097     };
00098 
00099 } // container
00100 } // wns
00101 #endif // NOT defined WNS_CONTAINER_BINARYTREE_HPP

Generated on Mon May 21 03:31:38 2012 for openWNS by  doxygen 1.5.5