/*++ Copyright (c) 1998 Microsoft Corporation All rights reserved. Module Name: dlistlck.inl Abstract: Double linked list with lock template class. Author: Weihai Chen (WeihaiC) 06/29/98 Revision History: --*/ template TDoubleListLock::TDoubleListLock(void): m_bValid (FALSE) { if (m_pList = new TDoubleList) { if (m_pList->bValid ()) m_bValid = TRUE; } } template TDoubleListLock::~TDoubleListLock(void) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) { delete m_pList; m_pList = NULL; } } template BOOL TDoubleListLock::InsertItem (T item) { BOOL bRet = FALSE; if (m_bValid) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) bRet = m_pList->InsertItem (item); } return bRet; } template BOOL TDoubleListLock::AppendItem (T item) { BOOL bRet = FALSE; if (m_bValid) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) bRet = m_pList->AppendItem (item); } return bRet; } template BOOL TDoubleListLock::DeleteItem (T item) { BOOL bRet = FALSE; if (m_bValid) { Lock(); bRet = m_pList->DeleteItem (item); Unlock(); } return FALSE; } template BOOL TDoubleListLock::InsertNode (TDoubleNode *pNewNode) { BOOL bRet = FALSE; if (m_bValid) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) bRet = m_pList->InsertNode (pNewNode); } return bRet; } template BOOL TDoubleListLock::AppendNode (TDoubleNode *pNewNode) { BOOL bRet = FALSE; if (m_bValid) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) bRet = m_pList->AppendNode (pNewNode); } return bRet; } template BOOL TDoubleListLock::DeleteNode (TDoubleNode *pNode) { BOOL bRet = FALSE; if (pNode && m_bValid) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) bRet = m_pList->DeleteNode (pNode); } return bRet; } template TDoubleNode * TDoubleListLock::GetHead (void) { TDoubleNode * pHead = NULL; if (m_bValid) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) pHead = m_pList->GetHead (); } return pHead; } template BOOL TDoubleListLock::GetTotalNode (PDWORD pdwCount) { BOOL bRet = FALSE; if (m_bValid) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) { bRet = m_pList->GetTotalNode (pdwCount); } } return bRet; } template T TSrchDoubleListLock::FindItemFromKey (KEYTYPE key) { T pItem = NULL; if (m_bValid) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) pItem = m_pList->FindItemFromKey (key); } return pItem; } template TDoubleNode * TSrchDoubleListLock::FindNodeFromItem (T item) { TDoubleNode * pNode = NULL; if (m_bValid) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) pNode = m_pList->FindNodeFromItem (item); } return pNode; } template TDoubleNode * TSrchDoubleListLock::FindNodeFromKey (KEYTYPE key) { TDoubleNode * pNode = NULL; if (m_bValid) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) pNode = m_pList->FindNodeFromKey (key); } return pNode; } template T TSrchDoubleListLock::FindItemFromItem (T item) { T pItem = NULL; if (m_bValid) { TAutoCriticalSection CritSec (m_CritSec); if (CritSec.bValid ()) pItem = m_pList->FindItemFromItem (item); } return pItem; }