Files
RepoMain/ZCppMain/ZMainAVL.H

361 lines
12 KiB
C++
Raw Normal View History

#ifndef __ZCPPMAIN_ZMAINAVL_H__
#define __ZCPPMAIN_ZMAINAVL_H__
#include "ZCppMain/ZMainHead.H"
namespace ZNsMain
{
namespace ZNsEnum
{
enum ZEAVL_INSERT
{
ZEAVL_INSERT_RIGHT = +1,
ZEAVL_INSERT_OK = 0, /* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20>̴<EFBFBD>. */
ZEAVL_INSERT_LEFT = -1,
ZEAVL_INSERT_NONE = -2 /* <20><><EFBFBD><EFBFBD> <20><> <20><> */
};/*
enum ZEAVL_INSERT*/
}/*
namespace ZNsEnum*/
namespace ZNsInterface
{
template<typename TypeArg> class ZtCAVL_BASE
{
protected:
template<typename TNode> void OnEqual(TypeArg AR_Data, TNode* AP_Node)
{
}/*
template<typename TNode> void OnEqual(TypeArg AR_Data, TNode* AP_Node) */
template<typename TKey, typename TNode> void OnEqualKey(TKey AR_Key, TNode* AP_Node)
{
}/*
template<typename TKey, typename TNode> void OnEqualKey(TKey AR_Key, TNode* AP_Node) */
protected:
};/*
template<typename TypeArg> class ZtCAVL_BASE*/
/*//////////////////////////////////////////////////////////////////////////
<EFBFBD><EFBFBD> <EFBFBD>Ʒ<EFBFBD> ZtCAVL_NodeBase<> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> ZtCAVL_BASE<> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>μ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ϳ<EFBFBD> <EFBFBD>پ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ִ<EFBFBD>. ZtCAVL_BASE<> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ְ<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZtCAVL_BASE<> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>, AP_Node->OnEqual() <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZtCAVL_NodeBase<> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> ȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ZtCAVL_NodeBase<> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>𿡼<EFBFBD><EFBFBD><EFBFBD> ȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ʴ´<EFBFBD>. <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD> <EFBFBD>̷<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴµ<EFBFBD>, <EFBFBD>Ƹ<EFBFBD> ZtCAVL_Multi_BASE<> <EFBFBD><EFBFBD>
ZtCAVL_Multi_NodeBase<> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>׷<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
-- 2012-09-03 19:20:00
//////////////////////////////////////////////////////////////////////////*/
template<typename TNodeArg> class ZtCAVL_NodeBase
{
protected:
void OnEqual(TNodeArg AR_Data)
{
}/*
void OnEqual(TNodeArg AR_Data)*/
template<typename TKey> void OnEqualKey(TKey AR_Key)
{
}/*
template<typename TKey> void OnEqualKey(TKey AR_Key)*/
protected:
};/*
template<typename TNodeArg> class ZtCAVL_NodeBase*/
template<typename TypeArg> class ZtCAVL_Multi_BASE
{
protected:
template<typename TNode> void OnEqual(TypeArg AR_Data, TNode* AP_Node)
{
AP_Node->OnEqual(AR_Data);
}/*
template<typename TNode> void OnEqual(TypeArg AR_Data, TNode* AP_Node) */
template<typename TKey, typename TNode> void OnEqualKey(TKey AR_Key, TNode* AP_Node)
{
AP_Node->OnEqualKey(AR_Key);
}/*
template<typename TKey, typename TNode> void OnEqualKey(TKey AR_Key, TNode* AP_Node) */
protected:
};/*
template<typename TypeArg> class ZtCAVL_Multi_BASE*/
/*//////////////////////////////////////////////////////////////
<EFBFBD><EFBFBD> ZtCAVL_Multi_NodeBase template <EFBFBD><EFBFBD> multi set/map <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
ZtCAVL_Multi_NodeBase::TypeEqual <EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <EFBFBD><EFBFBD>.
class CTypeMy
{
public:
typedef CLargeAVL<some param> CLargeMap;
typedef typename CLargeMap::ZCNode::TypeEqual TypeEqual;
}
//////////////////////////////////////////////////////////////*/
template< typename TNodeArg, typename TEqualList
>
class ZtCAVL_Multi_NodeBase ////////////////////
{
public :
typedef TEqualList TypeEqual;
protected:
TEqualList mo_EqualList;
public :
void OnEqual(TNodeArg AR_Data)
{
mo_EqualList.push_back(AR_Data);
}/*
void OnEqual(TNodeArg AR_Data)*/
template<typename TKey> void OnEqualKey(TKey AR_Key)
{
mo_EqualList.push_back(AR_Key);
}/*
template<typename TKey> void OnEqualKey(TKey AR_Key) */
const TEqualList& GetCEqualList() const
{
return mo_EqualList;
}/*
const TEqualList& GetCEqualList() const*/
public:
};/*
template< typename TNodeArg, typename TEqualList
>
class ZtCAVL_Multi_NodeBase //////////////////*/
/*/////////////////////////////////////////////////////////////////////
<EFBFBD><EFBFBD> AVL Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD> <EFBFBD>ٷ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ø<EFBFBD><EFBFBD>̴<EFBFBD>.
/////////////////////////////////////////////////////////////////////*/
template<typename TData> class ZtCAVL_PtrLongData
{
public :
typedef TData* TypeData;
protected:
TData* mp_CData;
public :
ZtCAVL_PtrLongData()
{
mp_CData=0;
}/*
ZtCAVL_PtrLongData()*/
TData* GetDataPtr() const
{
return mp_CData;
}/*
TData* GetDataPtr() const*/
void SetDataPtr(TData* AP_CData)
{
mp_CData=AP_CData;
}/*
void SetDataPtr(TData* AP_CData)*/
operator ZNsMain::ZTypIntPtr() const
{
return mp_CData;
}/*
operator ZNsMain::ZTypIntPtr() const*/
ZtCAVL_PtrLongData& operator=(const ZtCAVL_PtrLongData& rhs)
{
mp_CData=rhs.mp_CData; return *this;
}/*
ZtCAVL_PtrLongData& operator=(const ZtCAVL_PtrLongData& rhs)*/
ZtCAVL_PtrLongData& operator=(const TData* AP_CData)
{
mp_CData=const_cast<TData*>(AP_CData); return *this;
}/*
ZtCAVL_PtrLongData& operator=(const TData* AP_CData)*/
bool operator==(const ZtCAVL_PtrLongData& rhs) const{return mp_CData==rhs.mp_CData;}
bool operator> (const ZtCAVL_PtrLongData& rhs) const{return (ZNsMain::ZTypIntPtr)mp_CData > (ZNsMain::ZTypIntPtr)rhs.mp_CData;}
bool operator< (const ZtCAVL_PtrLongData& rhs) const{return (ZNsMain::ZTypIntPtr)mp_CData < (ZNsMain::ZTypIntPtr)rhs.mp_CData;}
bool operator==(const TData* AP_CData) const{return mp_CData==AP_CData;}
bool operator> (const TData* AP_CData) const{return (ZNsMain::ZTypIntPtr)mp_CData > (ZNsMain::ZTypIntPtr)AP_CData;}
bool operator< (const TData* AP_CData) const{return (ZNsMain::ZTypIntPtr)mp_CData < (ZNsMain::ZTypIntPtr)AP_CData;}
protected:
};/*
template<typename TData> class ZtCAVL_PtrLongData*/
/* int, long <20><><EFBFBD><EFBFBD> <20>񱳿<EFBFBD><F1B1B3BF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> primitive Ÿ<><C5B8><EFBFBD>̳<EFBFBD> object <20><>
key <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ִ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>, <EFBFBD>ش<EFBFBD> AVL Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD> <EFBFBD>ٷ<EFBFBD>
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD> wrap <EFBFBD><EFBFBD> Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ø<EFBFBD> */
template< typename TKeyData ,
typename TMainData,
typename TKeyArg =const TKeyData &,
typename TMainArg=const TMainData&
>
class ZtCAVL_KeyData //////////////////////////
{
public :
typedef TKeyData TypeKey ;
typedef TMainData TypeData;
protected:
TKeyData mo_CKeyData ; mutable
TMainData mo_CMainData;
public :
ZtCAVL_KeyData(){}
ZtCAVL_KeyData(TKeyArg AO_TKeyArg)
{
mo_CKeyData=AO_TKeyArg;
}/*
ZtCAVL_KeyData(TKeyArg AO_TKeyArg)*/
ZtCAVL_KeyData(TKeyArg AO_TKeyArg, TMainArg AO_TMainArg)
{
mo_CKeyData =AO_TKeyArg ;
mo_CMainData=AO_TMainArg;
}/*
ZtCAVL_KeyData(TKeyArg AO_TKeyArg, TMainArg AO_TMainArg)*/
TKeyArg GetCKeyData () const{return mo_CKeyData ;}
TMainArg GetCMainData () const{return mo_CMainData;}
TMainData& GetCMainDataRef() const{return mo_CMainData;}
void SetCMainData(TMainArg AO_TRealArg) const
{
mo_CMainData=AO_TRealArg;
}/*
void SetCMainData(TMainArg AO_TRealArg) const*/
void SetKeyData(TKeyArg AO_TKeylArg)
{
mo_CKeyData=AO_TKeylArg;
}/*
void SetKeyData(TKeyArg AO_TKeylArg)*/
bool operator==(const ZtCAVL_KeyData& rhs) const{return mo_CKeyData==rhs.mo_CKeyData;}
bool operator> (const ZtCAVL_KeyData& rhs) const{return mo_CKeyData> rhs.mo_CKeyData;}
bool operator< (const ZtCAVL_KeyData& rhs) const{return mo_CKeyData< rhs.mo_CKeyData;}
bool operator==(TKeyArg AO_TPrimitive) const{return mo_CKeyData==AO_TPrimitive;}
bool operator> (TKeyArg AO_TPrimitive) const{return mo_CKeyData> AO_TPrimitive;}
bool operator< (TKeyArg AO_TPrimitive) const{return mo_CKeyData< AO_TPrimitive;}
ZtCAVL_KeyData& operator=(const ZtCAVL_KeyData& rhs)
{
if(this==&rhs) return *this;
mo_CKeyData =rhs.mo_CKeyData ;
mo_CMainData=rhs.mo_CMainData; return *this;
}/*
ZtCAVL_KeyData& operator=(const ZtCAVL_KeyData& rhs)*/
ZtCAVL_KeyData& operator=(TKeyArg AO_TPrimitive)
{
mo_CKeyData=AO_TPrimitive; return *this;
}/*
ZtCAVL_KeyData& operator=(TKeyArg AO_TPrimitive)*/
public:
};/*
template< typename TKeyData ,
typename TMainData,
typename TKeyArg =const TKeyData &,
typename TMainArg=const TMainData&
>
class ZtCAVL_KeyData ////////////////////////*/
}/*
namespace ZNsInterface*/
/*/////////////////////////////////////////////////////////////////////////////////////
<EFBFBD><EFBFBD> mulit set <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȱ<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
ZNsMain::CLargeAVL ///////////////////////////////////
<
int,
int,
ZNsMain::ZNsInterface::ZtCAVL_Multi_BASE<int>,
ZNsMain::ZNsInterface::ZtCAVL_Multi_NodeBase<int, ZNsMain::ZtCDoubleList<int> >
>
VO_CLargeAvl_Multi; //////////////////////////////////
VO_CLargeAvl_Multi.AddData(1);
VO_CLargeAvl_Multi.AddData(2);
VO_CLargeAvl_Multi.AddData(2);
VO_CLargeAvl_Multi.AddData(2);
VO_CLargeAvl_Multi.AddData(2);
/////////////////////////////////////////////////////////////////////////////////////*/
namespace NsType
{
template< typename TStringData, //= ZNsMain::ZtCStringBase<char> ,
typename TEnvVar , //= ZNsMain::ZNsCGI::ZNsBase::ZtCEnvVar<TStringData>,
typename TEnvVarSet //= ZNsMain::ZtCObjAVL<TEnvVar>
>
class ZtCTypeEnvVarSet /*############################################################*/
{
public:
typedef TStringData ZCStringData;
typedef TEnvVar ZCEnvVar ;
typedef TEnvVarSet ZCEnvVarSet ;
typedef typename ZCEnvVarSet ::ZCNode ZCEnvVarNode;
typedef typename ZCStringData::ZCMainChars ZCMainChars ;
typedef typename ZCStringData::TypeChar TypeChar ;
typedef typename ZCStringData::TypeLength TypeLength ;
public:
};/*
template< typename TStringData, //= ZNsMain::ZtCStringBase<char> ,
typename TEnvVar , //= ZNsMain::ZNsCGI::ZNsBase::ZtCEnvVar<TStringData>,
typename TEnvVarSet //= NsCPP::ZtCObjAVL<TEnvVar>
>
class ZtCTypeEnvVarSet /*############################################################*/
}/*
namespace NsType*/
}/*
namespace ZNsMain */
#endif // __ZCPPMAIN_ZMAINAVL_H__