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
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;
|
|
}
|
|
|