/********************************************//**
* Time: 2011年4月14日10:03:06
* Project: 矢量渲染
* Puruose: FourTreeTpl.h四叉树模板结构定义
* Author: 刘巍
* Describe: 定义四叉树数据结构,包括节点,以及基本树操作
***********************************************/
#ifndef FOURTREETPL_H
#define FOURTREETPL_H
#include "core.h"
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/list.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/split_member.hpp>
//! 四叉树的节点位置.
/*! 定义四叉树的节点位置 */
typedef enum
{
EM_LEFTUP = 0, /*!< 左上位置 */
EM_RIGHTTUP = 1, /*!< 右上位置 */
EM_LEFTDOWN = 2, /*!< 左下位置 */
EM_RIGHTDOWN = 3 /*!< 右下位置 */
} NodeDirection ;
/**
* @brief 四叉树类
* 实现四叉树中的基本操作
*/
template<class Type> class FourTree;
/**
* @brief 四叉树节点类
* 四叉树节点,包括其子孩子,以及基本树节点操作
*/
template<class Type> class FourTreeNode
{
friend class FourTree<Type>;
typedef FourTreeNode<Type> FourTreeNodeType;
public:
/**
* 默认构造函数,构造一个空的节点
*/
FourTreeNode():m_pluChild(NULL),m_pruChild(NULL),m_pldChild(NULL),m_prdChild(NULL)
{};
/**
* 重载构造函数
* @param item 节点数据
* @param lu 左上孩子指针
* @param ru 右上孩子指针
* @param ld 左下孩子指针
* @param rd 右下孩子指针
*/
FourTreeNode(const Type& item, FourTreeNodeType *lu = NULL,FourTreeNodeType *ru = NULL,FourTreeNodeType *ld = NULL,FourTreeNodeType *rd = NULL)
{
m_data = item;
m_pluChild = lu;
m_pruChild = ru;
m_pldChild = ld;
m_prdChild = rd;
}
/**
* 得到节点数据
* @return 节点数据
*/
Type GetData() const
{
return m_data;
}
/**
* 设置节点数据
* @param item节点数据
*/
void SetData(const Type& item)
{
m_data = item;
}
/**
* 得到左上孩子节点
* @return 左上孩子节点
*/
FourTreeNodeType* GetLeftUpData() const
{
return m_pluChild;
}
/**
* 得到右上孩子节点
* @return 右上孩子节点
*/
FourTreeNodeType* GetRightUpData() const
{
return m_pruChild;
}
/**
* 得到左下孩子节点