home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / Papers / C++ Exceptions / µShell / Array Classes / (Hidden) / DynamicArray.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-13  |  2.0 KB  |  71 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        DynamicArray.h
  3.  
  4.     Contains:    A handle-based dynamic array class
  5.                 
  6.     Written by: Dave Falkenburg
  7.     
  8.     Copyright:    © 1994-95 by Dave Falkenburg, all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.      
  12.          <1>      1/3/95    DRF        First checked in.
  13.  */
  14.  
  15. #ifndef _DYNAMICARRAY_
  16. #define _DYNAMICARRAY_
  17.  
  18. #ifndef        __TYPES__
  19. #include    <Types.h>
  20. #endif
  21.  
  22. typedef    void            ArrayElement, *ArrayElementPtr;
  23. typedef    unsigned long    ArrayElementCount;
  24. typedef    unsigned long    ArrayElementIndex;
  25.  
  26. //--------------------------------------------------------------------------------
  27. class TDynamicArray
  28. {
  29. public:
  30.                         TDynamicArray();
  31.     virtual                ~TDynamicArray();
  32.  
  33.     //    insertion & deletion
  34.  
  35.     OSErr                Insert(ArrayElementPtr elementToInsert, ArrayElementIndex beforeElement);
  36.     OSErr                InsertFirst(ArrayElementPtr elementToInsert);
  37.     OSErr                InsertLast(ArrayElementPtr elementToInsert);
  38.  
  39.     void                Delete(ArrayElementIndex whichElement);
  40.     void                DeleteFirst();
  41.     void                DeleteLast();
  42.  
  43.     //    element accessors
  44.  
  45.     ArrayElementCount    GetElementCount() { return fElementCount; };
  46.  
  47.     ArrayElementPtr        GetElementPtr(ArrayElementIndex whichElement);
  48.     void                SetElementPtr(ArrayElementIndex whichElement, ArrayElementPtr element);
  49.  
  50.     //    iterators
  51.     
  52.     typedef void        (*EachArrayElementProc)(ArrayElementPtr element, void * param);
  53.     typedef Boolean        (*EachArrayElementTestProc)(ArrayElementPtr element, void * param);
  54.  
  55.     void                ForEachElement(EachArrayElementProc proc, void * param);
  56.     ArrayElementPtr        FirstElementThat(EachArrayElementTestProc proc, void * param);
  57.     ArrayElementPtr        LastElementThat(EachArrayElementTestProc proc, void * param);
  58.  
  59. protected:
  60.     ArrayElementCount    fElementCount;
  61.     ArrayElementPtr **    fStorage;
  62. };
  63.  
  64. template <class AType> class TDynamicArrayOf : public TDynamicArray
  65. {
  66.     inline AType*    GetElement(ArrayElementIndex whichElement) { return (AType*) GetElementPtr(whichElement); }
  67.     inline void        SetElement(ArrayElementIndex whichElement, ArrayElementPtr element)    { SetElementPtr(whichElement, (ArrayElementPtr) element); }
  68. };
  69.  
  70. #endif // _DYNAMICARRAY_
  71.