home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / odtlktv4.zip / ODTLKT / TOOLKIT / BETA / SAMPLES / OPENDOC / PUBUTILS / ODUTILS.CPP < prev    next >
C/C++ Source or Header  |  1995-11-29  |  3KB  |  100 lines

  1. /********************************************************************/
  2. /*                                                                  */
  3. /*  Licensed Materials - Property of IBM                            */
  4. /*                                                                  */
  5. /*                                                                  */
  6. /* Copyright (C) International Business Machines Corp., 1994.       */
  7. /* Copyright (C) Apple Computer, Inc., 1994                         */
  8. /*                                                                  */
  9. /*  US Government Users Restricted Rights -                         */
  10. /*  Use, duplication, or disclosure restricted                      */
  11. /*  by GSA ADP Schedule Contract with IBM Corp.                     */
  12. /*                                                                  */
  13. /*  File:    ODUtils.cpp                                            */
  14. /*                                                                  */
  15. /*  Contains:  Utility functions for objects                        */
  16. /*                                                                  */
  17. /********************************************************************/
  18.  
  19. #ifndef _EXCEPT_
  20. #include <Except.h>
  21. #endif
  22.  
  23. #define INCL_ODAPI
  24. #define INCL_ODSHAPE
  25. #define INCL_ODTRANSFORM
  26. #include <os2.h>
  27.  
  28. #ifndef _ODDEBUG_
  29. #include <ODDebug.h>
  30. #endif
  31.  
  32. #ifndef _ODUTILS_
  33. #include "ODUtils.h"
  34. #endif
  35.  
  36.  
  37. void ODAcquireObject(Environment* ev, ODRefCntObject* object)
  38. {
  39.   if (object != kODNULL) 
  40.   {
  41.     object->Acquire(ev);
  42.   }
  43. }
  44.  
  45. void ODSafeReleaseObject( ODRefCntObject *obj )
  46. {
  47.   if( obj ) {
  48.       TRY{
  49.         obj->Release(somGetGlobalEnvironment());
  50.       }CATCH_ALL{
  51.         // do nothing
  52.       }ENDTRY
  53.   }
  54. }
  55.  
  56.  
  57. void ODTransferReference( Environment *ev, ODRefCntObject *oldObj, ODRefCntObject *newObj )
  58. {
  59.   if( oldObj != newObj ) {
  60.     if( newObj )
  61.       newObj->Acquire(ev);
  62.     if( oldObj ) {
  63.       TRY{
  64.         oldObj->Release(ev);
  65.       }CATCH_ALL{
  66.         if( newObj ) newObj->Release(ev);
  67.         RERAISE;
  68.       }ENDTRY
  69.     }
  70.   }
  71. }
  72.  
  73.  
  74. ODShape* ODCopyAndRelease( Environment *ev, ODShape *s )
  75. {
  76.   ASSERT(s!=kODNULL,kODErrInvalidParameter);
  77.   if( s->GetRefCount(ev) == 1 )
  78.     return s;
  79.   ODShape *copy = s->Copy(ev);
  80.   s->Release(ev);
  81.   return copy;
  82. }
  83.  
  84. ODTransform* ODCopyAndRelease( Environment *ev, ODTransform *t )
  85. {
  86.   ASSERT(t!=kODNULL,kODErrInvalidParameter);
  87.   if( t->GetRefCount(ev) == 1 )
  88.     return t;
  89.   ODTransform *copy = t->Copy(ev);
  90.   t->Release(ev);
  91.   return copy;
  92. }
  93.  
  94. ODBoolean ODObjectsAreEqual(Environment* ev, ODObject* a, ODObject* b)
  95. {
  96.   return (a == b) || (a && a->IsEqualTo(ev,b));
  97.   // Alternative:
  98.   // return a ? a->IsEqualTo(ev, b) : !b;
  99. }
  100.