2025-04-27 07:49:33 -04:00

144 lines
2.9 KiB
C++

#ifndef __LIST_CLASS_HEADER_
#define __LIST_CLASS_HEADER_
typedef class _GENERIC_NODE : public virtual COMPONENT_SYNC
{
public:
_GENERIC_NODE();
virtual ~_GENERIC_NODE() {};
virtual void ComponentCleanUpRoutine(void) {};
virtual void StopSync(void) {};
virtual LONG CompareToMe(class _GENERIC_NODE *);
virtual PCHAR GetObjectName() { return _GENERIC_NODE::ObjectNamep; }
class _GENERIC_NODE * Nextp;
class _GENERIC_NODE * Prevp;
ULONG iKey1;
ULONG iKey2;
protected:
static const PCHAR ObjectNamep;
} GENERIC_NODE, * PGENERIC_NODE;
typedef class _CLIST : public virtual COMPONENT_SYNC
{
public:
_CLIST();
~_CLIST();
virtual void ComponentCleanUpRoutine(void);
virtual PCHAR GetObjectNamep() { return ObjectNamep; }
BOOLEAN isListEmpty(VOID);
VOID InsertSorted(PGENERIC_NODE);
PGENERIC_NODE SearchNodeKeys(
ULONG iKey1,
ULONG iKey2
);
PGENERIC_NODE RemoveSortedKeys(
ULONG iKey1,
ULONG iKey2
);
PGENERIC_NODE RemoveNodeFromList(PGENERIC_NODE);
PGENERIC_NODE Pop();
private:
PGENERIC_NODE RemoveHead(VOID);
PGENERIC_NODE RemoveTail(VOID);
VOID InsertTail(PGENERIC_NODE);
VOID InsertHead(PGENERIC_NODE);
VOID FreeExistingNodes();
PGENERIC_NODE listHeadp;
PGENERIC_NODE listTailp;
static const PCHAR ObjectNamep;
} CLIST, * PCLIST;
//
// MACROS
//
#define CLEAN_NODE(_X_) \
(_X_)->AcquireLock(); \
(_X_)->Nextp = NULL; \
(_X_)->Prevp = NULL; \
(_X_)->ReleaseLock()
/*
#if 0
#define RemoveNodeFromList(Entry) \
{ \
PGENERIC_NODE _EX_Prev; \
PGENERIC_NODE _EX_Next; \
_EX_Next = (Entry)->Nextp; \
_EX_Prev = (Entry)->Prevp; \
if(_EX_Prev) _EX_Prev->Nextp = _EX_Next; \
if(_EX_Next) _EX_Next->Prevp = _EX_Prev; \
}
#endif
//
// QUEUE Macros
//
#define QUEUE_ENTRY listHeadp
#define PQUEUE_ENTRY listTailp
#define InitializeQueueHead() InitializeListHead()
#define IsQueueEmpty() IsListEmpty()
#define Enqueue(Entry) InsertTailList(Entry)
#define Dequeue() RemoveHeadList()
#define FreeQueue(FreeFunction) \
FreeList(FreeFunction)
//
// STACK Macros
//
#define STACK_ENTRY listHeadp
#define PSTACK_ENTRY listTailp
#define InitializeStackHead() InitializeListHead()
#define IsStackEmpty() IsListEmpty()
#define Push(Entry) InsertHeadList(Entry)
#define Pop() RemoveHeadList()
#define FreeStack(FreeFunction) \
FreeList(FreeFunction)
*/
#endif //__LIST_CLASS_HEADER_