Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*===================================================================
Microsoft Denali
Microsoft Confidential. Copyright 1996 Microsoft Corporation. All Rights Reserved.
Component: Hash tables with LRU threading
File: DblLink.cpp
Owner: DGottner
simple, effective linked list manager ===================================================================*/
#include "denpre.h"
#pragma hdrstop
#include "DblLink.h"
#include "memchk.h"
/*------------------------------------------------------------------
* C D b l L i n k */
/*===================================================================
CDblLink::UnLink
Unlink this element from the list that it currently resides on ===================================================================*/
void CDblLink::UnLink() { m_pLinkPrev->m_pLinkNext = m_pLinkNext; m_pLinkNext->m_pLinkPrev = m_pLinkPrev;
// Paranoia:
// reset the node to empty after the unlink
//
m_pLinkPrev = m_pLinkNext = this; }
/*===================================================================
CDblLink::AppendTo
Append this link onto a list
Parameters: pListHead - pointer to a the list header (itself a CDblLink) to append this item onto.
Condition: the link must be UnLink'ed before this method is called ===================================================================*/
void CDblLink::AppendTo(CDblLink &ListHead) { UnLink();
m_pLinkNext = &ListHead; // remember termination is at list head
m_pLinkPrev = ListHead.m_pLinkPrev; ListHead.m_pLinkPrev->m_pLinkNext = this; ListHead.m_pLinkPrev = this; }
/*===================================================================
CDblLink::Prepend
Prepend this link onto a list
Parameters: pListHead - pointer to a the list header (itself a CDblLink) to prepend this item onto.
Condition: the link must be UnLink'ed before this method is called ===================================================================*/
void CDblLink::PrependTo(CDblLink &ListHead) { UnLink();
m_pLinkPrev = &ListHead; m_pLinkNext = ListHead.m_pLinkNext; ListHead.m_pLinkNext->m_pLinkPrev = this; ListHead.m_pLinkNext = this; }
|