28template <
class tVARTYPE>
class DLList;
34 friend class DLList<tVARTYPE>;
53template <
class tVARTYPE>
class DLList
63 void insertAtBeginning(
const tVARTYPE& val);
64 void insertAtEnd(
const tVARTYPE& val);
101template <
class tVARTYPE>
113template <
class tVARTYPE>
120template <
class tVARTYPE>
127 while (pCurrNode != NULL)
129 pNextNode = pCurrNode->m_pNext;
131 pCurrNode = pNextNode;
142template <
class tVARTYPE>
147 assert((m_pHead == NULL) || (m_iLength > 0));
153 m_pHead->m_pPrev = pNode;
154 pNode->m_pNext = m_pHead;
168template <
class tVARTYPE>
173 assert((m_pHead == NULL) || (m_iLength > 0));
179 m_pTail->m_pNext = pNode;
180 pNode->m_pPrev = m_pTail;
194template <
class tVARTYPE>
199 assert((m_pHead == NULL) || (m_iLength > 0));
201 if ((pThisNode == NULL) || (pThisNode->m_pPrev == NULL))
203 insertAtBeginning(val);
209 pThisNode->m_pPrev->m_pNext = pNode;
210 pNode->m_pPrev = pThisNode->m_pPrev;
211 pThisNode->m_pPrev = pNode;
212 pNode->m_pNext = pThisNode;
219template <
class tVARTYPE>
224 assert((m_pHead == NULL) || (m_iLength > 0));
226 if ((pThisNode == NULL) || (pThisNode->m_pNext == NULL))
234 pThisNode->m_pNext->m_pPrev = pNode;
235 pNode->m_pNext = pThisNode->m_pNext;
236 pThisNode->m_pNext = pNode;
237 pNode->m_pPrev = pThisNode;
243template <
class tVARTYPE>
249 assert(pNode != NULL);
251 pPrevNode = pNode->m_pPrev;
252 pNextNode = pNode->m_pNext;
254 if ((pPrevNode != NULL) && (pNextNode != NULL))
256 pPrevNode->m_pNext = pNextNode;
257 pNextNode->m_pPrev = pPrevNode;
259 else if (pPrevNode != NULL)
261 pPrevNode->m_pNext = NULL;
264 else if (pNextNode != NULL)
266 pNextNode->m_pPrev = NULL;
283template <
class tVARTYPE>
289 assert(pNode != NULL);
291 if (getLength() == 1)
296 if (pNode == m_pTail)
301 pPrevNode = pNode->m_pPrev;
302 pNextNode = pNode->m_pNext;
304 if ((pPrevNode != NULL) && (pNextNode != NULL))
306 pPrevNode->m_pNext = pNextNode;
307 pNextNode->m_pPrev = pPrevNode;
309 else if (pPrevNode != NULL)
311 pPrevNode->m_pNext = NULL;
314 else if (pNextNode != NULL)
316 pNextNode->m_pPrev = NULL;
325 pNode->m_pNext = NULL;
326 m_pTail->m_pNext = pNode;
327 pNode->m_pPrev = m_pTail;
332template <
class tVARTYPE>
335 assert(pNode != NULL);
337 return pNode->m_pNext;
341template <
class tVARTYPE>
344 assert(pNode != NULL);
346 return pNode->m_pPrev;
350template <
class tVARTYPE>
359 while (pNode != NULL)
367 pNode = pNode->m_pNext;