home *** CD-ROM | disk | FTP | other *** search
- /*
- File: DynamicArray.h
-
- Contains: A handle-based dynamic array class
-
- Written by: Dave Falkenburg
-
- Copyright: © 1994-95 by Dave Falkenburg, all rights reserved.
-
- Change History (most recent first):
-
- <1> 1/3/95 DRF First checked in.
- */
-
- #ifndef _DYNAMICARRAY_
- #define _DYNAMICARRAY_
-
- #ifndef __TYPES__
- #include <Types.h>
- #endif
-
- typedef void ArrayElement, *ArrayElementPtr;
- typedef unsigned long ArrayElementCount;
- typedef unsigned long ArrayElementIndex;
-
- class TDynamicArray
- {
- protected:
- ArrayElementCount fElementCount;
- ArrayElementPtr ** fStorage;
-
- public:
- TDynamicArray();
- virtual ~TDynamicArray();
-
-
- // insertion & deletion
-
- OSErr InsertFirst(ArrayElementPtr elementToInsert);
- OSErr InsertLast(ArrayElementPtr elementToInsert);
- OSErr Insert(ArrayElementPtr elementToInsert, ArrayElementIndex beforeElement);
-
- OSErr DeleteFirst();
- OSErr DeleteLast();
- OSErr Delete(ArrayElementPtr elementToDelete);
- OSErr DeleteElementGivenIndex(ArrayElementIndex whichElement);
-
- OSErr MoveToFront(ArrayElementPtr elementToMove);
-
- // element accessors
-
- ArrayElementPtr First()
- {
- return (fElementCount ? (*fStorage)[0] : NULL);
- };
-
- ArrayElementPtr Last()
- {
- return (fElementCount ? (*fStorage)[fElementCount-1] : NULL);
- };
-
- ArrayElementPtr GetElementPtr(ArrayElementIndex whichElement)
- {
- return (*fStorage)[whichElement];
- };
-
- void SetElementPtr(ArrayElementIndex whichElement, ArrayElementPtr element)
- {
- (*fStorage)[whichElement] = element;
- }
-
- ArrayElementCount GetElementCount()
- {
- return fElementCount;
- };
-
-
- // iterators
-
- typedef void (*EachArrayElementProc)(ArrayElementPtr element, void * param);
- typedef Boolean (*EachArrayElementTestProc)(ArrayElementPtr element, void * param);
-
- void ForEachElement(EachArrayElementProc proc, void * param);
- ArrayElementPtr FirstElementThat(EachArrayElementTestProc proc, void * param);
- ArrayElementPtr LastElementThat(EachArrayElementTestProc proc, void * param);
- };
-
- #endif
-