123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- //---------------------------------------------------------------------------
- //
- // LList.h -- Prototype for linked lists
- //
- //---------------------------------------------------------------------------//
- // Copyright (C) Microsoft Corporation. All rights reserved. //
- //===========================================================================//
- #ifndef LLIST_H
- #define LLIST_H
- //---------------------------------------------------------------------------
- // Include Files
- #ifndef DSTD_H
- #include "dstd.h"
- #endif
- //---------------------------------------------------------------------------
- // Macro Definitions
- #ifndef NULL
- #define NULL 0L
- #endif
- //---------------------------------------------------------------------------
- // Structure and Class Definitions
- struct Link
- {
- Link *Next;
- Link (Link *InitNext = NULL)
- {
- Next = InitNext;
- }
- Link *GetNext (void)
- {
- return Next;
- }
- virtual ~Link (void) {}
- };
- //---------------------------------------------------------------------------
- class LinkedList
- {
- protected:
- Link *Head;
- Link *Tail;
- public:
- LinkedList (void)
- {
- Head = Tail = NULL;
- }
- virtual ~LinkedList ()
- {
- Kill();
- }
- void AddToHead (Link *Node);
- void AddToTail (Link *Node);
- void Remove (Link *Node, Link *Last=NULL); // The second param is if you know the previous pointer, you can optimize
- void Destroy (Link *Node, Link *Last = NULL); // The 'Last' parameter is optional in all of the methods that have it.
- void InsertAfter (Link *PlaceTo, Link *NodeToPut); // If sent, it avoids a search through the list.
- void InsertBefore (Link *PlaceTo, Link *NodeToPut);
- void Kill();
- void MoveAfter (Link *PlaceTo, Link *NodeToPut, Link *Last = NULL);
- bool Traverse (Link *&Current);
- bool IsEmpty (void)
- {
- return Head == NULL;
- }
- Link *GetHead (void)
- {
- return Head;
- }
- Link *GetTail (void)
- {
- return Tail;
- }
- unsigned long Count (void);
- };
- //---------------------------------------------------------------------------
- #endif
- //---------------------------------------------------------------------------
- //
- // Edit Log
- //
- //---------------------------------------------------------------------------
|