home *** CD-ROM | disk | FTP | other *** search
- /*
- File: LinkedListOfObject.h
-
- Contains: stuff
-
- */
-
- #ifndef _LINKEDLISTOFOBJECT_
- #define _LINKEDLISTOFOBJECT_
- #pragma once
-
- #include "LinkedList.h"
- #include "LinkedListIterator.h"
- #include "ListLink.h"
-
- //--------------------------------------------------------------------------------
- class LinkedListOfObject : public LinkedList
- {
- public:
- LinkedListOfObject() : LinkedList() {}
- LinkedListOfObject(ListLink* first, ListLink* last) : LinkedList(first, last) {}
-
- // these routings handle the mapping between objects and links allowing
- // links to be embedded in the objects, etc.
-
- virtual void* GetObjectFromLink(ListLink* elem);
- virtual ListLink* GetLinkFromObject(void *objectPtr);
- virtual bool IsObjectLink(void *objectPtr, ListLink* elem);
-
- virtual void AppendElement(void* elem);
- virtual void PrependElement(void* elem);
- virtual void RemoveElement(void* elem);
-
- private:
- typedef LinkedList Inherited;
- };
-
- //--------------------------------------------------------------------------------
- template <class AType> class LinkedListOf : public LinkedListOfObject
- {
- public:
- LinkedListOf() : LinkedListOfObject() {}
- LinkedListOf(AType* first, AType* last) : LinkedListOfObject(first, last) {}
-
- protected:
- virtual ListLink* GetLinkFromObject(void *objectPtr)
- { return (ListLink*) (AType*) objectPtr; };
-
- private:
- typedef LinkedListOfObject Inherited;
- };
-
-
- //--------------------------------------------------------------------------------
- class IteratorForLinkedListOfObject : LinkedListIterator
- {
- protected:
- LinkedListOfObject& fObjectList; // The list we're iterating
- void* fCurrentObject; // cached current object
- Boolean fBackwards; // Last step was backwards
- Boolean fCurrentSeen; // Current element was deleted
- Boolean fAtEndOfList;
-
- public:
- IteratorForLinkedListOfObject(LinkedListOfObject& list, ListLink* start = nil);
- ~IteratorForLinkedListOfObject();
-
- void* CurrentObject(void) { fCurrentSeen = true; return fCurrentObject; }
-
- virtual void GotoFirst(void);
- virtual void GotoLast(void);
- virtual void GotoNext(void);
- virtual void GotoPrev(void);
-
- virtual void* FirstObject(void);
- virtual void* LastObject(void);
- virtual void* NextObject(void);
- virtual void* PrevObject(void);
-
- protected:
- virtual void LinkInserted(ListLink& link); // Called after inserting a lin in list
- virtual void RemovingLink(ListLink& link); // Called before removing a Link from list
- virtual void RemovingAllLinks(void); // Called before clearing the list
-
- private:
- typedef LinkedListIterator Inherited;
- };
-
-
- //--------------------------------------------------------------------------------
- template <class AType> class IteratorForLinkedListOf : public IteratorForLinkedListOfObject
- {
- public:
- IteratorForLinkedListOf(LinkedListOf<AType> &list, ListLink* start = nil)
- : IteratorForLinkedListOfObject(list, start) {}
-
- AType* Current(void) { return (AType*) CurrentObject(); }
- AType* First(void) { return (AType*) FirstObject(); }
- AType* Last(void) { return (AType*) LastObject(); }
- AType* Next(void) { return (AType*) NextObject(); }
- AType* Prev(void) { return (AType*) PrevObject(); }
-
- private:
- typedef IteratorForLinkedListOfObject Inherited;
- };
-
-
- #endif // _LINKEDLISTOFOBJECT_
-
-