TAPs 0.7.7.3
TAPsHEVertexList.hpp
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines