home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / odtlktv4.zip / ODTLKT / TOOLKIT / BETA / SAMPLES / OPENDOC / PARTS / PUBLIC / ORDCOLL.H < prev   
C/C++ Source or Header  |  1995-11-29  |  6KB  |  168 lines

  1. /*
  2.   File:    OrdColl.h
  3.  
  4.   Contains:  Definition of class ODxOrderedCollection
  5.  
  6.   Written by:  Richard Rodseth
  7.  
  8.   Copyright:  ⌐ 1993-94 by Apple Computer, Inc., all rights reserved.
  9.  
  10.   Change History (most recent first):
  11.  
  12.      <6>   6/20/94  RR    ODMemoryHeap* -> ODMemoryHeapID
  13.      <5>   6/14/94  RR    Added forward declaration ODMemoryHeap
  14.      <4>    6/9/94  RR    Remove ASLM stuff
  15.      <2>   5/10/94  RR    Removed ASLM_COMPATIBLE/CDECL
  16.      <1>    5/5/94  CG    first checked in
  17.      <9>   3/15/94  MB    Changes to support SCpp/ASLM builds,
  18.                   #1150864.
  19.      <8>    2/9/94  Té    add a couple of explicit "virtual" to the
  20.                   class declaration to pacify ASLM
  21.      <7>    2/7/94  JA    Tiger Team Makeover!
  22.      <6>    2/2/94  NP    Added support for allocating internal
  23.                   structures in given heap.
  24.      <5>   12/7/93  NP    Added helpful comments, because PEOPLE
  25.                   AREN'T COMMENTING HEADER FILES!!!!!
  26.      <4>  11/19/93  PH    ASLM fix - add class id for ODxOCValueLink
  27.      <3>  11/19/93  NP    Add definition of ODxOCValueLink to here (to
  28.                   allow subclassing.)
  29.      <1>   8/13/93  RCR    first checked in
  30.  
  31.   To Do:
  32. */
  33.  
  34. #ifndef _ORDCOLL_
  35. #define _ORDCOLL_
  36.  
  37.  
  38. #ifdef INCL_ODDTS // include DTS C++ headers
  39. #ifndef SOM_HH_DTS_Included
  40. #include <som.hh>
  41. #endif
  42. #endif // INCL_ODDTS
  43.  
  44.  
  45. #ifndef _ODTYPES_
  46.    // pick up definitions like ODBoolean, kODNULL, etc
  47.    #include "ODTypes.h"
  48. #endif
  49.  
  50.  
  51. //==============================================================================
  52. // Theory of Operation
  53. //==============================================================================
  54.  
  55. //==============================================================================
  56. // Constants
  57. //==============================================================================
  58.  
  59. //==============================================================================
  60. // Scalar Types
  61. //==============================================================================
  62.  
  63. typedef void* ElementType;
  64.  
  65. //=====================================================================================
  66. // Classes defined in this interface
  67. //=====================================================================================
  68.  
  69. class ODxOrderedCollection;  // An ordered (not sorted) collection of ElementTypes
  70. class ODxOrderedCollectionIterator;
  71.  
  72. //=====================================================================================
  73. // Classes used by this interface
  74. //=====================================================================================
  75.  
  76. class ODxOCValueLink;       // A link plus a value of type ElementType.
  77.  
  78. //=====================================================================================
  79. // Global Variables
  80. //=====================================================================================
  81.  
  82. //=====================================================================================
  83. // Class ODxOCValueLink - Definition
  84. //=====================================================================================
  85.  
  86.  
  87. //=====================================================================================
  88. // Class ODxOrderedCollection
  89. //=====================================================================================
  90.  
  91. class ODxOrderedCollection
  92. {
  93.  
  94. public:
  95.  
  96.   ODxOrderedCollection();
  97.   //ODxOrderedCollection(ODMemoryHeapID where);
  98.   virtual ~ODxOrderedCollection();
  99.  
  100.            long Count() const;
  101.  
  102.   virtual void  AddFirst(ElementType element);
  103.   virtual void  AddLast(ElementType element);
  104.   virtual void  AddBefore(ElementType existing, ElementType tobeadded);
  105.   virtual void  AddAfter(ElementType existing, ElementType tobeadded);
  106.  
  107.   ElementType  After(ElementType existing);
  108.   ElementType  Before(ElementType existing);
  109.  
  110.   ElementType  First();
  111.     // Returns kODNULL if there is no first element.
  112.   ElementType  Last();
  113.  
  114.   virtual ElementType  RemoveFirst();
  115.     // Don't call if there are no elements. Crash will result.
  116.   virtual ElementType  RemoveLast();
  117.   virtual void  RemoveAll();
  118.  
  119.     // Called from the destructor. Removes all elements, deleting the links
  120.     // Does not delete the elements themselves
  121.  
  122.   //virtual void  DeleteAll();
  123.  
  124.     // Removes and deletes all elements
  125.  
  126.   virtual void  Remove(ElementType existing);
  127.   virtual ODBoolean  Contains(ElementType existing);
  128.  
  129.   virtual ODxOrderedCollectionIterator* CreateIterator();
  130.  
  131.   ODxOCValueLink * After(ODxOCValueLink *existing);
  132.   ODxOCValueLink * Before(ODxOCValueLink *existing);
  133.   ODxOCValueLink * FirstVL();
  134.   ODxOCValueLink * LastVL();
  135.  
  136. protected:
  137.    virtual ODxOCValueLink*   CreateNewLink(ElementType value) const;
  138.    virtual ODBoolean  ElementsMatch(ElementType v1,ElementType v2) const;
  139.      // Does a pointer comparison by default
  140.  
  141. private:
  142.   ODxOCValueLink * fImplementation;
  143.  
  144.   friend class ODxOrderedCollectionIterator;
  145.   friend class ListIterator;
  146. };
  147.  
  148. //=====================================================================================
  149. // Class ODxOrderedCollectionIterator
  150. //=====================================================================================
  151.  
  152. class ODxOrderedCollectionIterator {
  153. public:
  154.   ODxOrderedCollectionIterator(ODxOrderedCollection* collection);
  155.   ~ODxOrderedCollectionIterator();
  156.   ElementType  First();
  157.   ElementType  Next();
  158.   ElementType  Last();
  159.   // ElementType  Previous();
  160.   ODBoolean  IsNotComplete();
  161.  
  162. private:
  163.     ODxOrderedCollection*  fCollection;
  164.     ODxOCValueLink * fImplementation;
  165. };
  166.  
  167. #endif // _ORDCOLL_
  168.