56 lines
1.4 KiB
C
56 lines
1.4 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_
|