![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsHEVertexList.hpp 00003 00004 Class HEVertexList is a doubly linked list for HEVertex (half-edge node). 00005 00006 SUKITTI PUNAK (04/05/2005) 00007 UPDATE (06/17/2006) 00008 ******************************************************************************/ 00009 #ifndef TAPs_HE_VERTEX_LIST_HPP 00010 #define TAPs_HE_VERTEX_LIST_HPP 00011 00012 #include "TAPsHEVertex.hpp" 00013 00014 BEGIN_NAMESPACE_TAPs 00015 //============================================================================= 00016 template <typename T> 00017 class HEVertexList { 00018 //============================================================================= 00019 // DATA MEMBERS 00020 //============================================================================= 00021 protected: 00022 int m_iLength; // number of nodes in the list 00023 HEVertex<T> * pHead; // ptr to header node 00024 HEVertex<T> * pTail; // ptr to tail node 00025 HEVertex<T> * pCurrent; // ptr to a (current) node in the list 00026 //============================================================================= 00027 // MEMBER FUNCTIONS 00028 //============================================================================= 00029 public: 00030 /* 00031 //------------------------------------------------------------------------- 00032 // put it through ostream 00033 friend std::ostream & operator<< ( std::ostream &output, HEVertexList<T> const &o ) 00034 { 00035 output << "\n======================\n" 00036 << "TAPs::HEVertexList<" 00037 << typeid(T).name() << "> Class\n" 00038 << "======================\n"; 00039 // HEVertex<T> * current = o.Head(); 00040 o.Head(); 00041 output << "Number of vertices: " << o.m_iLength << "\n"; 00042 for ( int i = 0; i < o.m_iLength; ++i ) { 00043 // output << "Vertex#" << i << current << "\n"; 00044 } 00045 return output; 00046 } 00047 //*/ 00048 //------------------------------------------------------------------------- 00049 // Constructor(s) and Destructor 00050 HEVertexList (); 00051 virtual ~HEVertexList (); 00052 //------------------------------------------------------------------------- 00053 // Operations 00054 inline int Length () const { return m_iLength; } 00055 inline int Size () const { return m_iLength; } 00056 inline bool IsEmpty () const { return pHead == NULL ? true : false; } 00057 //inline HEVertex<T> * Head () const { return pHead; } 00058 //inline HEVertex<T> * Tail () const { return pTail; } 00059 inline HEVertex<T> * Current () const { return pCurrent; } 00060 //inline void Current ( HEVertex<T> * const n ) { pCurrent = n; } 00061 inline HEVertex<T> * Head () { pCurrent = pHead; return pCurrent; } 00062 inline HEVertex<T> * Tail () { pCurrent = pTail; return pCurrent; } 00063 inline HEVertex<T> * NextCurrent () { pCurrent = pCurrent->Next(); return pCurrent; } 00064 inline HEVertex<T> * PrevCurrent () { pCurrent = pCurrent->Prev(); return pCurrent; } 00065 inline bool IsHead () const { return pHead == pCurrent ? true : false; } 00066 inline bool IsTail () const { return pTail == pCurrent ? true : false; } 00067 void InsertBefore ( HEVertex<T> * const n ); // insert before pCurrent 00068 void InsertAfter ( HEVertex<T> * const n ); // insert after pCurrent 00069 void Prepend ( HEVertex<T> * const n ); // insert at head 00070 void Append ( HEVertex<T> * const n ); // insert at tail 00071 //------------------------------------------- 00072 // Caution pVertex must be from this list, 00073 // otherwise run time error will surely occur! 00074 inline HEVertex<T> * Remove (); // remove at pCurrent 00075 HEVertex<T> * Remove ( HEVertex<T> * pVertex ); // remove pVertex 00076 inline void Delete ( HEVertex<T> * pVertex ); // delete pVertex 00077 //------------------------------------------------------------------------- 00078 }; // END CLASS HEVertexList 00079 //============================================================================= 00080 END_NAMESPACE_TAPs 00081 //----------------------------------------------------------------------------- 00082 // Include definition if TAPs_USE_EXPORT is not defined 00083 //#if !defined( TAPs_USE_EXPORT ) 00084 #include "TAPsHEVertexList.cpp" 00085 //#endif 00086 //----------------------------------------------------------------------------- 00087 #endif 00088 //345678901234567890123456789012345678901234567890123456789012345678901234567890 00089 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8