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.
 
 
 
 
 
 

107 lines
1.6 KiB

/*++
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;
}