Leaked source code of windows server 2003
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.
 
 
 
 
 
 

104 lines
2.3 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: list.cpp
//
// Contents: list helper functions.
//
// History: 27-Nov-96 kevinr created
//
//--------------------------------------------------------------------------
#include "global.hxx"
//--------------------------------------------------------------------------
//
//--------------------------------------------------------------------------
BOOL CList::InsertHead( CNode *pn)
{
if (pn == NULL)
return FALSE;
pn->SetPrev( NULL);
pn->SetNext( m_pnHead);
if (m_pnHead)
m_pnHead->SetPrev( pn);
else
m_pnTail = pn; // list was empty
m_pnHead = pn;
m_cNode++;
return TRUE;
};
//--------------------------------------------------------------------------
//
//--------------------------------------------------------------------------
BOOL CList::InsertTail( CNode *pn)
{
if (pn == NULL)
return FALSE;
pn->SetPrev( m_pnTail);
pn->SetNext( NULL);
if (m_pnTail)
m_pnTail->SetNext( pn);
else
m_pnHead = pn; // list was empty
m_pnTail = pn;
m_cNode++;
return TRUE;
};
//--------------------------------------------------------------------------
// Remove node from the list. Do not delete the node.
//--------------------------------------------------------------------------
BOOL CList::Remove( CNode *pn)
{
if (pn == NULL)
return FALSE;
CNode *pnPrev = pn->Prev();
CNode *pnNext = pn->Next();
if (pnPrev)
pnPrev->SetNext( pnNext);
if (pnNext)
pnNext->SetPrev( pnPrev);
if (pn == m_pnHead)
m_pnHead = pnNext;
if (pn == m_pnTail)
m_pnTail = pnPrev;
m_cNode--;
return TRUE;
};
//--------------------------------------------------------------------------
//
//--------------------------------------------------------------------------
CNode * CList::Nth( DWORD i)
{
CNode *pn;
if (i >= m_cNode)
return NULL;
for (pn = m_pnHead;
(i>0) && pn;
i--, pn=pn->Next())
;
return pn;
};