WindowsXP-SP1/termsrv/remdsk/rds/h/oblist.h
2020-09-30 16:53:49 +02:00

56 lines
1.5 KiB
C++

#ifndef _OBLIST_H_
#define _OBLIST_H_
// class COBNODE;
#define POSITION COBNODE*
struct COBNODE
{
POSITION pNext;
void* pItem;
};
class COBLIST
{
protected:
POSITION m_pHead;
POSITION m_pTail;
virtual BOOL Compare(void* pItemToCompare, void* pComparator)
{return(pItemToCompare == pComparator);};
public:
COBLIST() : m_pHead(NULL), m_pTail(NULL) { };
POSITION GetHeadPosition() { return(m_pHead); };
POSITION GetTailPosition() { return(m_pTail); };
virtual void * RemoveAt(POSITION rPos);
virtual void * ReplaceAt(POSITION rPos, void* pNewItem)
{
void *pvoid = rPos->pItem;
rPos->pItem = pNewItem;
return(pvoid);
}
POSITION AddTail(void* pItem);
BOOL IsEmpty() { return(!m_pHead); };
void * GetTail();
void * GetNext(POSITION& rPos);
void * SafeGetFromPosition(POSITION rPos);
POSITION GetPosition(void* pItem);
POSITION Lookup(void* pComparator);
void EmptyList();
virtual ~COBLIST();
#ifdef DEBUG
void * GetHead();
void * RemoveHead();
// void * RemoveTail(); // inefficient
void * GetFromPosition(POSITION rPos);
#else
void * GetHead(){return GetFromPosition(GetHeadPosition());};
void * RemoveHead() { return RemoveAt(m_pHead); };
// void * RemoveTail() { return RemoveAt(m_pTail); }; // inefficient
void * GetFromPosition(POSITION rPos){return(rPos->pItem);};
#endif
};
#endif // ndef _OBLIST_H_