00001 #ifndef _CTBtreeList_HXX
00002 #define _CTBtreeList_HXX 1
00003
00008
00009
00010
00011
00012
00013
00014
00015
00016 template <class TP, class TC>
00017 class CTBtreeListHead;
00018
00019 template <class TP, class TC>
00020 class CTBtreeListLink {
00021
00022 public:
00023
00024 CTBtreeListLink();
00025 ~CTBtreeListLink();
00026
00027 TP* Parent() const;
00028 TC* Prev() const;
00029 TC* Next() const;
00030
00031 void InsertHead(TC* p_this,
00032 CTBtreeListLink<TP,TC> TC::* o_link,
00033 TP& parent,
00034 CTBtreeListHead<TP,TC> TP::* o_head);
00035 void InsertTail(TC* p_this,
00036 CTBtreeListLink<TP,TC> TC::* o_link,
00037 TP& parent,
00038 CTBtreeListHead<TP,TC> TP::* o_head);
00039
00040 void InsertBefore(TC* p_this,
00041 CTBtreeListLink<TP,TC> TC::* o_link,
00042 CTBtreeListHead<TP,TC> TP::* o_head,
00043 TC& elem);
00044 void InsertAfter(TC* p_this,
00045 CTBtreeListLink<TP,TC> TC::* o_link,
00046 CTBtreeListHead<TP,TC> TP::* o_head,
00047 TC& elem);
00048
00049 void Remove(CTBtreeListLink<TP,TC> TC::* o_link,
00050 CTBtreeListHead<TP,TC> TP::* o_head);
00051
00052 bool operator! () const;
00053
00054 operator bool() const;
00055
00056 private:
00057
00058 CTBtreeListLink(
00059 const CTBtreeListLink<TP,TC>& rhs);
00060 CTBtreeListLink<TP,TC>& operator=(
00061 const CTBtreeListLink<TP,TC>& rhs);
00062
00063 private:
00064
00065 TP* mp_parent;
00066 TC* mp_prev;
00067 TC* mp_next;
00068 };
00069
00070
00071 template <class TP, class TC>
00072 class CTBtreeListHead {
00073
00074 friend class CTBtreeListLink<TP,TC>;
00075
00076 public:
00077
00078 CTBtreeListHead();
00079 ~CTBtreeListHead();
00080
00081 TC* First() const;
00082 TC* Last() const;
00083
00084 bool operator! () const;
00085
00086 operator bool() const;
00087
00088 private:
00089
00090 CTBtreeListHead(
00091 const CTBtreeListHead<TP,TC>& rhs);
00092 CTBtreeListHead<TP,TC>& operator=(
00093 const CTBtreeListHead<TP,TC>& rhs);
00094
00095 private:
00096
00097 TC* mp_first;
00098 TC* mp_last;
00099 };
00100
00101
00102 #include "CTBtreeList.icc"
00103
00104 #endif
00105
00106
00107
00108
00109
00110