home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc / OpenDoc Development / Debugging Support / OpenDoc™ Source Code / Storage / Bento / DocPriv.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-28  |  7.1 KB  |  280 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        DocPriv.h
  3.  
  4.     Contains:    Private Definition for CMDocument
  5.  
  6.     Owned by:    Vincent Lo
  7.  
  8.     Copyright:    © 1992 - 1996 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.     
  12.          <2>     3/15/96    DM        1295410: create list iterators on stack
  13.                                     (avoid mem thrash during purge)
  14.         <13>     6/10/95    VL        1252808: ODVersionID is moved from
  15.                                     ODTypesB.idl.
  16.         <12>     5/25/95    jpa        List.h --> LinkList.h [1253324]
  17.         <11>     3/31/95    EL        1234685: ExportTo has extra parameter so we
  18.                                     can skip top draft. Dirty flag no longer
  19.                                     needed because version list only
  20.                                     externalized on close or flush.
  21.         <10>     3/24/95    EL        1209355: dirty flag for version list.
  22.                                     #define TestFlushContainer before making
  23.                                     this change permanent.
  24.          <9>     3/23/95    VL        1228003: Added Print.
  25.          <8>      3/9/95    VL        1226089: Introduced fHighestDraftID to
  26.                                     prevent DraftID from being reused in a
  27.                                     session.
  28.          <7>     2/15/95    EL        1182275: Add GetSameVersionDraftID to get
  29.                                     the lowest draft that has the same version
  30.                                     as the latest draft.
  31.          <6>     1/11/95    VL        1185688: Made storage more robust in terms
  32.                                     of error handling. Also did some code
  33.                                     review cleanup.
  34.          <5>     8/26/94    VL        1150214: Added Count.
  35.          <4>     7/11/94    VL        Added Exists calls.
  36.          <3>     6/20/94    CC        ODMemoryHeap* changed to ODMemoryHeapID.
  37.          <2>     6/15/94    RR        ODHeap -> ODMemoryHeap
  38.          <1>     5/27/94    VL        first checked in
  39.  
  40.     To Do:
  41.     In Progress:
  42. */
  43.  
  44.  
  45. #ifndef _DOCPRIV_
  46. #define _DOCPRIV_
  47.  
  48. #ifndef _LINKLIST_
  49. #include "LinkList.h"
  50. #endif
  51.  
  52. #ifndef _PLFMDEF_
  53. #include "PlfmDef.h"
  54. #endif
  55.  
  56. #ifndef _ODMEMORY_
  57. #include "ODMemory.h"
  58. #endif
  59.  
  60. //==============================================================================
  61. // Types
  62. //==============================================================================
  63. typedef    ODULong    ODVersionID;
  64.  
  65. //==============================================================================
  66. // Constants
  67. //==============================================================================
  68. const    ODVersionID    kODTombstonedVersion = 0;
  69. #define TestFlushContainer 1
  70.  
  71. //==============================================================================
  72. // Classes defined in this interface
  73. //==============================================================================
  74. class DraftLink;
  75. class DraftList;
  76. class VersionList;
  77. class DraftListIterator;
  78. class VersionListIterator;
  79. class CMDraft;
  80.  
  81. //==============================================================================
  82. // Classes used by this interface
  83. //==============================================================================
  84.  
  85. //==============================================================================
  86. // DraftLink
  87. //==============================================================================
  88.  
  89. class DraftLink : public Link {
  90.  
  91. public:
  92.     
  93.     DraftLink(ODDraftID id, CMDraft* draft)
  94.     {
  95.         fDraftID = id;
  96.         fDraft = draft;
  97.     }
  98.     ODVMethod ~DraftLink() {;};
  99.     
  100.     ODDraftID GetDraftID() {return fDraftID;};
  101.     CMDraft*    GetDraft() {return fDraft;};
  102.  
  103. private:
  104.     
  105.     ODDraftID                fDraftID;
  106.     CMDraft*                fDraft;
  107. };
  108.  
  109. //==============================================================================
  110. // DraftList
  111. //==============================================================================
  112.  
  113. class DraftList
  114. {    
  115. public:
  116.  
  117.     DraftList();
  118.     
  119.     ODVMethod    ~DraftList();
  120.     
  121.     ODMethod void Initialize();
  122.     
  123.     ODMethod void Add(ODDraftID draftID, CMDraft* draft);
  124.     
  125.     ODMethod void Remove(ODDraftID draftID);
  126.     
  127.     ODMethod CMDraft* Get(ODDraftID draftID);
  128.     
  129.     ODMethod ODULong Count();
  130.     
  131. private:
  132.  
  133.     ODMethod DraftLink* GetLink(ODDraftID draftID);
  134.     
  135.  
  136.     LinkedList* fLinkedList;
  137.     
  138.     ODMemoryHeapID        fHeap;
  139.     
  140. public:    // private by convention
  141.  
  142.     ODMethod    ODMemoryHeapID        GetHeap();
  143.     ODMethod    LinkedList* GetLinkedList();
  144. };
  145.  
  146. //==============================================================================
  147. // DraftListIterator
  148. //==============================================================================
  149.  
  150. class DraftListIterator
  151. {
  152.  
  153. public:
  154.  
  155.     DraftListIterator(DraftList* DraftList);
  156.     
  157.     ~DraftListIterator();
  158.     
  159.     ODMethod    void        Initialize();
  160.     
  161.     ODMethod    CMDraft*    Last();
  162.     ODMethod    CMDraft*    Previous();
  163.     ODMethod    ODBoolean    IsNotComplete();
  164.     
  165. private:
  166.  
  167.     DraftList*            fDraftList;
  168.     LinkedListIterator  fIterator;
  169. };
  170.  
  171. //==============================================================================
  172. // VersionLink
  173. //==============================================================================
  174.  
  175. class VersionLink : public Link {
  176.  
  177. public:
  178.     
  179.     VersionLink(ODDraftID draftID, ODVersionID versionID);
  180.     ODVMethod ~VersionLink() {;};
  181.     
  182.     ODDraftID        GetDraftID() {return fDraftID;};
  183.     ODVersionID    GetVersionID() {return fVersionID;};
  184.     void            SetVersionID(ODVersionID versionID) {fVersionID = versionID;};
  185.  
  186. private:
  187.  
  188.     ODDraftID                fDraftID;
  189.     ODVersionID            fVersionID;
  190. };
  191.  
  192.     
  193. //==============================================================================
  194. // VersionList
  195. //==============================================================================
  196.  
  197. class VersionList {
  198.     
  199. public:
  200.  
  201.     VersionList();
  202.     ODVMethod    ~VersionList();
  203.     
  204.     ODMethod    void Initialize();
  205.     ODMethod    void Initialize(ODPtr buffer, ODULong size);
  206.     ODMethod    void ExportTo(ODPtr* buffer, ODULong* size, ODBoolean ignoreTopDraft);
  207.     ODMethod    void Reinitialize(ODPtr buffer, ODULong size);
  208.     
  209.     ODMethod     ODDraftID CreateDraft();
  210.     ODMethod    void RemoveDraft(ODDraftID draftID);
  211.     
  212.     ODMethod    ODVersionID    GetDraft(ODDraftID draftID);
  213.     
  214.     ODMethod    ODVersionID    CreateVersion(ODDraftID draftID);
  215.     ODMethod    ODVersionID    GetCurrentVersion(ODDraftID draftID);
  216.     
  217.     ODMethod    ODBoolean Exists(ODDraftID draftID);
  218.     
  219.     ODMethod    void             CollapseDrafts(ODDraftID fromDraftID, ODDraftID toDraftID);
  220.     ODMethod    void             SaveToAPrevDraft(ODDraftID fromDraftID, ODDraftID toDraftID);
  221.     ODMethod    ODVersionID    RemoveChanges(ODDraftID draftID);
  222.     ODMethod    ODBoolean        ChangedFromPrev(ODDraftID draftID);
  223.  
  224.     ODMethod    ODDraftID GetBaseDraftID();
  225.     ODMethod    ODDraftID GetLatestDraftID();
  226.     ODMethod    ODDraftID GetPreviousDraftID(ODDraftID draftID);
  227.     ODMethod    ODDraftID GetNextDraftID(ODDraftID draftID);
  228.     ODMethod    ODDraftID GetSameVersionDraftID(ODDraftID draftID);
  229.  
  230.     ODMethod    ODBoolean PreviousDraftExists(ODDraftID draftID);
  231.     ODMethod    ODBoolean NextDraftExists(ODDraftID draftID);
  232.     
  233.     ODMethod    ODBoolean    IsAbove(ODDraftID draftID1, ODDraftID draftID2);
  234.     ODMethod    ODBoolean    IsBelow(ODDraftID draftID1, ODDraftID draftID2);
  235.  
  236.     ODMethod    void Print(char* string);
  237.         
  238. private:
  239.  
  240.     ODMethod    VersionLink* GetLink(ODDraftID draftID);
  241.     ODMethod    void Clear();
  242.     
  243.     LinkedList*        fLinkedList;
  244.     ODMemoryHeapID    fHeap;
  245.     ODVersionID        fLatestVersionID;
  246.     ODDraftID        fHighestDraftID;
  247.     
  248. public: // private by convention
  249.  
  250.     ODMethod    ODMemoryHeapID        GetHeap();
  251.     ODMethod    LinkedList*    GetLinkedList();
  252. };
  253.  
  254.  
  255. //==============================================================================
  256. // VersionListIterator
  257. //==============================================================================
  258.  
  259. class VersionListIterator
  260. {
  261.  
  262. public:
  263.  
  264.     VersionListIterator(VersionList* versionList);
  265.     
  266.     ODVMethod    ~VersionListIterator();
  267.     
  268.     ODMethod    void    Initialize();
  269.     
  270.     ODMethod    VersionLink*    Last();
  271.     ODMethod    VersionLink*    Previous();
  272.     ODMethod    ODBoolean        IsNotComplete();
  273.     
  274. private:
  275.  
  276.     VersionList*        fVersionList;
  277.     LinkedListIterator  fIterator;
  278. };
  279.  
  280. #endif    // _DOCPRIV_