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.
|
|
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
Plist.cxx
Abstract:
Implementation of the CPList class.
Author:
Mario Goertzel [MarioGo]
Revision History:
MarioGo 02-24-95 Bits 'n pieces
--*/
#include<or.hxx>
void CPList::Insert(CPListElement *p) { CMutexLock lock(&this->_lock); CTime time;
time += _timeout;
p->SetTimeout(time);
this->CList::Insert(p); }
BOOL CPList::PeekMin(CTime &timeout) // inline?
{ CTime *pT; CMutexLock lock(&this->_lock);
CPListElement *first = (CPListElement *)this->First();
if (first && (pT = first->GetTimeout())) { timeout = *pT; return(TRUE); }
return(FALSE); }
CPListElement * CPList::Remove(CPListElement *p) // It must be safe to remove an element not actually in a list.
{ CMutexLock lock(&this->_lock);
return( (CPListElement *)this->CList::Remove(p) ); }
CListElement * CPList::MaybeRemoveMin( IN CTime &when ) { CMutexLock lock(&this->_lock);
CPListElement *first = (CPListElement *)this->First();
if (first && *first->GetTimeout() < when) { return(Remove(first)); }
return(0); }
void CPList::Reset( IN CPListElement *p ) { CMutexLock lock(&this->_lock);
ASSERT(p);
if (p->Next() == 0 && p->Previous() == 0 && First() != p) { ASSERT(Last() != p); return; }
Remove(p);
// Update timeout
CTime now; now += _timeout; p->SetTimeout(now);
Insert(p); return; }
|