home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 October: Mac OS SDK / Dev.CD Oct 96 SDK / Dev.CD Oct 96 SDK2.toast / Development Kits (Disc 2) / OpenDoc / OpenDoc Development / Debugging Support / OpenDoc Source Code / Utilities / ODUtils.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-22  |  4.1 KB  |  242 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        ODUtils.cpp
  3.  
  4.     Contains:    xxx put contents here xxx
  5.  
  6.     Owned by:    David McCusker
  7.  
  8.     Copyright:    © 1996 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <2>     3/15/96    DM        1292140: throw when persistent object has
  13.                                     no storage unit getting draft or session
  14.  
  15.     To Do:
  16. */
  17.  
  18. /*
  19.     File:        ODUtils.cpp
  20.  
  21.     Contains:    Utility functions for objects
  22.  
  23.     Owned by:    Jens Alfke
  24.  
  25.     Copyright:    © 1994 - 1995 by Apple Computer, Inc., all rights reserved.
  26.         
  27. */
  28.  
  29.  
  30. #ifndef _ODUTILS_
  31. #include "ODUtils.h"
  32. #endif
  33.  
  34. #ifndef SOM_ODFrame_xh
  35. #include <Frame.xh>
  36. #endif
  37.  
  38. #ifndef SOM_ODShape_xh
  39. #include <Shape.xh>
  40. #endif
  41.  
  42. #ifndef SOM_ODTransform_xh
  43. #include <Trnsform.xh>
  44. #endif
  45.  
  46. #ifndef SOM_Module_OpenDoc_Errors_defined
  47. #include <ErrorDef.xh>
  48. #endif
  49.  
  50. #ifndef SOM_ODDocument_xh
  51. #include <Document.xh>
  52. #endif
  53.  
  54. #ifndef SOM_ODContainer_xh
  55. #include <ODCtr.xh>
  56. #endif
  57.  
  58. #ifndef SOM_ODStorageSystem_xh
  59. #include <ODStor.xh>
  60. #endif
  61.  
  62. #ifndef _EXCEPT_
  63. #include <Except.h>
  64. #endif
  65.  
  66. #ifndef _ODDEBUG_
  67. #include <ODDebug.h>
  68. #endif
  69.  
  70. #ifndef SOM_ODFacet_xh
  71. #include <Facet.xh>
  72. #endif
  73.  
  74. #ifndef SOM_ODWindow_xh
  75. #include <Window.xh>
  76. #endif
  77.  
  78. #ifndef SOM_ODDraft_xh
  79. #include <Draft.xh>
  80. #endif
  81.  
  82. #ifndef SOM_ODStorageUnit_xh
  83. #include "StorageU.xh"
  84. #endif
  85.  
  86. #ifndef _TEMPOBJ_
  87. #include <TempObj.h>
  88. #endif
  89.  
  90.  
  91. void ODAcquireObject(Environment* ev, ODRefCntObject* object)
  92. {
  93.     if (object != kODNULL) 
  94.     {
  95.         object->Acquire(ev);
  96.     }
  97. }
  98.  
  99.  
  100. void ODRelease( Environment *ev, ODRefCntObject* obj )
  101. {
  102.     if( obj )
  103.         obj->Release(ev);
  104. }
  105.  
  106.  
  107. void ODFinalRelease( Environment *ev, ODRefCntObject* obj )
  108. {
  109.     if( obj ) {
  110. #if ODDebug
  111.         ODULong ref = obj->GetRefCount(ev);
  112.         if( ref != 1 ) {
  113.             WARN("%s %p's refcount is %ld, not 1",
  114.                     obj->somGetClassName(),obj,ref);
  115.         }
  116. #endif
  117.         obj->Release(ev);
  118.     }
  119. }
  120.  
  121.  
  122. void ODSafeReleaseObject( ODRefCntObject *obj )
  123. {
  124.     if( obj ) {
  125.         TRY{
  126.             obj->Release(somGetGlobalEnvironment());
  127.         }CATCH_ALL{
  128.             // do nothing
  129.         }ENDTRY
  130.     }
  131. }
  132.  
  133.  
  134. void ODTransferReference( Environment *ev, ODRefCntObject *oldObj, ODRefCntObject *newObj )
  135. {
  136.     if( oldObj != newObj ) {
  137.         if( newObj )
  138.             newObj->Acquire(ev);
  139.         if( oldObj ) {
  140.             TRY{
  141.                 oldObj->Release(ev);
  142.             }CATCH_ALL{
  143.                 if( newObj ) newObj->Release(ev);
  144.                 RERAISE;
  145.             }ENDTRY
  146.         }
  147.     }
  148. }
  149.  
  150.  
  151. ODShape* ODCopyAndRelease( Environment *ev, ODShape *s )
  152. {
  153.     ASSERT(s!=kODNULL, kODErrIllegalNullInput);
  154.     if( s->GetRefCount(ev) == 1 )
  155.         return s;
  156.     TempODShape tempS = s;        // Ensures that s gets released
  157.     ODShape *copy = s->Copy(ev);
  158.     return copy;
  159. }
  160.  
  161. ODTransform* ODCopyAndRelease( Environment *ev, ODTransform *t )
  162. {
  163.     ASSERT(t!=kODNULL, kODErrIllegalNullInput);
  164.     if( t->GetRefCount(ev) == 1 )
  165.         return t;
  166.     TempODTransform tempT = t;        // Ensures that t gets released
  167.     ODTransform *copy = t->Copy(ev);
  168.     return copy;
  169. }
  170.  
  171. #if ODDebug || !defined(_OD_IMPL_)
  172. ODBoolean ODObjectsAreEqual(Environment* ev, ODObject* a, ODObject* b)
  173. {
  174.     return (a == b) || (a && a->IsEqualTo(ev,b));
  175. }
  176. #endif
  177.  
  178.  
  179. ODPart* ODAcquirePart( Environment *ev, ODFrame *f )
  180. {
  181.     return f ?f->AcquirePart(ev) :kODNULL;
  182. }
  183.  
  184. ODPart* ODAcquirePart( Environment *ev, ODFacet *f )
  185. {
  186.     return f ?f->GetFrame(ev)->AcquirePart(ev) :kODNULL;
  187. }
  188.  
  189.  
  190. ODDraft* ODGetDraft( Environment *ev, ODStorageUnit *su )
  191. {
  192.     return su ?su->GetDraft(ev) :kODNULL;
  193. }
  194.  
  195. ODDraft* ODGetDraft( Environment *ev, ODPersistentObject *po )
  196. {
  197.     ODDraft* draft = kODNULL;
  198.     if ( po )
  199.     {
  200.         ODStorageUnit* su = po->GetStorageUnit(ev);
  201.         if ( su )
  202.             draft = su->GetDraft(ev);
  203.         else
  204.         {
  205.             THROW(kODErrInvalidPersistentObject);
  206.         }
  207.     }
  208.     return draft;
  209. }
  210.  
  211.  
  212. ODSession* ODGetSession( Environment *ev, ODStorageUnit *su )
  213. {
  214.     return su ?su->GetSession(ev) :kODNULL;
  215. }
  216.  
  217. ODSession* ODGetSession( Environment *ev, ODPersistentObject *po )
  218. {
  219.     ODSession* session = kODNULL;
  220.     if ( po )
  221.     {
  222.         ODStorageUnit* su = po->GetStorageUnit(ev);
  223.         if ( su )
  224.             session = su->GetSession(ev);
  225.         else
  226.         {
  227.             THROW(kODErrInvalidPersistentObject);
  228.         }
  229.     }
  230.     return session;
  231. }
  232.  
  233. ODSession* ODGetSession( Environment *ev, ODDocument *d )
  234. {
  235.     return d ?d->GetContainer(ev)->GetStorageSystem(ev)->GetSession(ev) :kODNULL;
  236. }
  237.  
  238. ODSession* ODGetSession( Environment *ev, ODDraft *d )
  239. {
  240.     return d ?d->GetDocument(ev)->GetContainer(ev)->GetStorageSystem(ev)->GetSession(ev) :kODNULL;
  241. }
  242.