Initial
This commit is contained in:
163
bsptree/BTREE.BAK
Normal file
163
bsptree/BTREE.BAK
Normal file
@@ -0,0 +1,163 @@
|
||||
#ifndef _BSPTREE_BTREE_HPP_
|
||||
#define _BSPTREE_BTREE_HPP_
|
||||
#ifndef _COMMON_ASSERT_HPP_
|
||||
#include <common/assert.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_WINDOWS_HPP_
|
||||
#include <common/windows.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_PUREVECTOR_HPP_
|
||||
#include <common/pvector.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_BLOCK_HPP_
|
||||
#include <common/block.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_SMARTPOINTER_HPP_
|
||||
#include <common/pointer.hpp>
|
||||
#endif
|
||||
#ifndef _BSPTREE_TREENODE_HPP_
|
||||
#include <bsptree/treenode.hpp>
|
||||
#endif
|
||||
|
||||
template <class T>
|
||||
class BTree
|
||||
{
|
||||
public:
|
||||
BTree(void);
|
||||
virtual ~BTree();
|
||||
DWORD leaves(void)const;
|
||||
WORD insert(const T &someItem,DWORD dupsOk=FALSE);
|
||||
WORD insert(PureVector<T> &vectorItems);
|
||||
void remove(const T &someItem);
|
||||
BOOL searchItem(T &someItem);
|
||||
BOOL searchItem(T &someItem,SmartPointer<T> &nodeItem);
|
||||
BOOL updateItem(T &someItem);
|
||||
void treeItems(PureVector<T> &vectoredItems)const;
|
||||
void treeItems(Block<T> &blockItems)const;
|
||||
void remove(void);
|
||||
protected:
|
||||
virtual TreeNode<T> *insertNode(TreeNode<T> *lpRootNode,TreeNode<T> *lpCurrentNode,const T &itemData);
|
||||
virtual TreeNode<T> *insertNodeDuplicate(TreeNode<T> *lpRootNode,TreeNode<T> *lpCurrentNode,const T &itemData);
|
||||
virtual T *searchNode(TreeNode<T> *lpRootNode,const T &someItem);
|
||||
virtual TreeNode<T> *deleteBTree(TreeNode<T> *lpRootNode);
|
||||
TreeNode<T> *rootNode(void)const;
|
||||
TreeNode<T> *rootNode(TreeNode<T> *lpRootNode);
|
||||
private:
|
||||
BTree(const BTree<T> &someBTree);
|
||||
BTree<T> &operator=(const BTree<T> &someBTree);
|
||||
void leaves(DWORD leaves);
|
||||
void remove(const T &someItem,TreeNode<T> *pCurrNode,TreeNode<T> *pParentNode);
|
||||
void retrieveNodes(TreeNode<T> *lpRootNode,PureVector<T> &vectoredNodes,WORD &vectorIndex)const;
|
||||
void retrieveNodes(TreeNode<T> *lpRootNode,Block<T> &blockNodes)const;
|
||||
|
||||
TreeNode<T> *mlpRootNode;
|
||||
DWORD mLeaves;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
BTree<T>::BTree(void)
|
||||
: mlpRootNode(0), mLeaves(0)
|
||||
{
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
BTree<T>::BTree(const BTree<T> &/*someBTree*/)
|
||||
: mlpRootNode(0), mLeaves(0)
|
||||
{ // private implementation
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
BTree<T>::~BTree()
|
||||
{
|
||||
remove();
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
BTree<T> &BTree<T>::operator=(const BTree<T> &/*someBTree*/)
|
||||
{ // private implementation
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
WORD BTree<T>::insert(const T &someItem,DWORD dupsOk)
|
||||
{
|
||||
DWORD itemCount(leaves());
|
||||
|
||||
if(dupsOk)
|
||||
{
|
||||
if(!mlpRootNode)leaves(leaves()+(0!=(mlpRootNode=insertNodeDuplicate(mlpRootNode,mlpRootNode,someItem))));
|
||||
else leaves(leaves()+(0!=insertNodeDuplicate(mlpRootNode,mlpRootNode,someItem)));
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!mlpRootNode)leaves(leaves()+(0!=(mlpRootNode=insertNode(mlpRootNode,mlpRootNode,someItem))));
|
||||
else leaves(leaves()+(0!=insertNode(mlpRootNode,mlpRootNode,someItem)));
|
||||
}
|
||||
return (!(itemCount==leaves()));
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
BOOL BTree<T>::searchItem(T &someItem)
|
||||
{
|
||||
T *lpTempItem=(searchNode(mlpRootNode,someItem));
|
||||
if(lpTempItem){someItem=*lpTempItem;return TRUE;}
|
||||
else return FALSE;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
BOOL BTree<T>::searchItem(T &someItem,SmartPointer<T> &nodeItem)
|
||||
{
|
||||
T *lpTempItem=(searchNode(mlpRootNode,someItem));
|
||||
if(lpTempItem){nodeItem=lpTempItem;return TRUE;}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
void BTree<T>::remove(void)
|
||||
{
|
||||
mlpRootNode=deleteBTree(mlpRootNode);
|
||||
leaves(0);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
TreeNode<T> *BTree<T>::rootNode(void)const
|
||||
{
|
||||
return mlpRootNode;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
TreeNode<T> *BTree<T>::rootNode(TreeNode<T> *lpRootNode)
|
||||
{
|
||||
remove();
|
||||
return mlpRootNode=lpRootNode;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
DWORD BTree<T>::leaves(void)const
|
||||
{
|
||||
return mLeaves;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline
|
||||
void BTree<T>::leaves(DWORD leaves)
|
||||
{
|
||||
mLeaves=leaves;
|
||||
}
|
||||
#if defined(_MSC_VER)
|
||||
#include <bsptree/btree.tpp>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user