home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / opendc12.zip / od124os2.exe / od12osr1.exe / src / CMSURefI.cpp < prev    next >
C/C++ Source or Header  |  1997-03-21  |  7KB  |  215 lines

  1. /* @(#)Z 1.5 com/src/bento/CMSURefI.cpp, odstorage, od96os2, odos29712d 97/03/21 17:19:17 (96/10/29 09:11:43) */
  2. //====START_GENERATED_PROLOG======================================
  3. //
  4. //
  5. //   COMPONENT_NAME: odstorage
  6. //
  7. //   CLASSES: none
  8. //
  9. //   ORIGINS: 82,27
  10. //
  11. //
  12. //   (C) COPYRIGHT International Business Machines Corp. 1995,1996
  13. //   All Rights Reserved
  14. //   Licensed Materials - Property of IBM
  15. //   US Government Users Restricted Rights - Use, duplication or
  16. //   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  17. //       
  18. //   IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  19. //   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  20. //   PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  21. //   CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
  22. //   USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  23. //   OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
  24. //   OR PERFORMANCE OF THIS SOFTWARE.
  25. //
  26. //====END_GENERATED_PROLOG========================================
  27. //
  28.  
  29. /*
  30.     File:        CMSURefI.cpp
  31.  
  32.     Contains:    Implementation for CMStorageUnitRefIterator class.
  33.  
  34.     Owned by:    Vincent Lo
  35.  
  36.     Copyright:    ⌐ 1993 - 1995 by Apple Computer, Inc., all rights reserved.
  37.  
  38.     Change History (most recent first):
  39.  
  40.          <6>    10/24/95    jpa        1293441: DM/VL: Bento memory reserve &
  41.                                     fatal container err.
  42.          <5>     10/8/95    TJ        Fixes Recomended by Refball
  43.          <4>      8/3/95    RR        #1257260: Collapse B classes. Remove
  44.                                     somInit methods. Don't call IsInitialized
  45.                                     or SubclassResponsibility
  46.          <3>     5/26/95    VL        1251403: Multithreading naming support.
  47.          <2>     1/26/95    VL        #???: SURef is now a 4-byte array.
  48.          <1>      7/5/94    VL        first checked in
  49.  
  50.     To Do:
  51.     In Progress:
  52.         
  53. */
  54.  
  55. #define CMStorageUnitRefIterator_Class_Source
  56. #define VARIABLE_MACROS
  57. #include <CMSURefI.xih>
  58.  
  59. #ifndef SOM_CMStorageUnit_xh
  60. #include <CMSU.xh>
  61. #endif
  62.  
  63. #ifndef _EXCEPT_
  64. #include "Except.h"
  65. #endif
  66.  
  67. #ifndef __CM_API__
  68. #include "CMAPI.h"
  69. #endif
  70.  
  71. #ifndef _SESSHDR_
  72. #include "SessHdr.h"
  73. #endif
  74.  
  75.  
  76. //==============================================================================
  77. // Function Prototype
  78. //==============================================================================
  79.  
  80. inline void BREAK_AND_THROW(ODError err)
  81. {
  82.     THROW(err);
  83. }
  84.  
  85. //==============================================================================
  86. // CMStorageUnitRefIterator
  87. //==============================================================================
  88.  
  89. //------------------------------------------------------------------------------
  90. // CMStorageUnitRefIterator::~CMStorageUnitRefIterator
  91. //------------------------------------------------------------------------------
  92.  
  93. SOM_Scope void  SOMLINK CMStorageUnitRefIteratorsomUninit(CMStorageUnitRefIterator *somSelf)
  94. {
  95.     CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
  96.     CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorsomUninit");
  97.  
  98.     CMStorageUnitRefIterator_parent_ODStorageUnitRefIterator_somUninit(somSelf);
  99. }
  100.  
  101. //------------------------------------------------------------------------------
  102. // CMStorageUnitRefIterator::InitStorageUnitRefIterator
  103. //------------------------------------------------------------------------------
  104.  
  105. SOM_Scope void  SOMLINK CMStorageUnitRefIteratorInitStorageUnitRefIterator(CMStorageUnitRefIterator *somSelf, Environment *ev,
  106.         ODStorageUnit* storageUnit)
  107. {
  108.     CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
  109.     CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorInitStorageUnitRefIterator");
  110.  
  111.     try
  112.     {
  113.     
  114.     /* Moved from somInit. SOM itself sets fields to zero
  115.     _fValue = kODNULL;
  116.     *((ODULong*) _fReference) = 0; 
  117.     */
  118.     _fNotComplete = kODTrue;
  119.     
  120.     CMStorageUnitRefIterator_parent_ODStorageUnitRefIterator_InitStorageUnitRefIterator(somSelf,ev,storageUnit);
  121.  
  122.     CMValue value = ((CMStorageUnit*) storageUnit)->GetCurValue(ev);
  123.     
  124.     if (value == kODNULL)
  125.         BREAK_AND_THROW(kODErrUnfocusedStorageUnit);
  126.     _fValue = value;
  127.     
  128.      }
  129.      catch (ODException _exception)
  130.      {
  131.          ODSetSOMException(ev, _exception);
  132.      }
  133. }
  134.  
  135. //------------------------------------------------------------------------------
  136. // CMStorageUnitRefIterator::First
  137. //------------------------------------------------------------------------------
  138.  
  139. SOM_Scope void  SOMLINK CMStorageUnitRefIteratorFirst(CMStorageUnitRefIterator *somSelf, Environment *ev,
  140.     ODStorageUnitRef ref)
  141. {
  142.     CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
  143.     CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorFirst");
  144.  
  145.     try
  146.     {
  147.  
  148.     CMContainer    container = (_fValue)? CMGetValueContainer(_fValue) : (CMContainer) kODNULL;
  149.     if (container)
  150.         ODSessionMustHaveCMAllocReserve(container);
  151.         
  152.     *((ODULong*) _fReference) = 0; 
  153.     if (CMGetNextReference(_fValue, _fReference) != kODNULL) {    
  154.         ODBlockMove(_fReference, ref, kODStorageUnitRefSize);
  155.         _fNotComplete = kODTrue;
  156.     }
  157.     else
  158.         _fNotComplete = kODFalse;
  159.  
  160.     if (container)
  161.         ODSessionRestoreCMAllocReserve(container);
  162.     
  163.     }
  164.     catch (ODException _exception)
  165.     {
  166.           ODSetSOMException(ev, _exception);
  167.     }
  168. }
  169.  
  170. //------------------------------------------------------------------------------
  171. // CMStorageUnitRefIterator::Next
  172. //------------------------------------------------------------------------------
  173.  
  174. SOM_Scope void  SOMLINK CMStorageUnitRefIteratorNext(CMStorageUnitRefIterator *somSelf, Environment *ev,
  175.     ODStorageUnitRef ref)
  176. {
  177.     CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
  178.     CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorNext");
  179.  
  180.      try
  181.      {
  182.  
  183.     CMContainer    container = (_fValue)? CMGetValueContainer(_fValue) : (CMContainer) kODNULL;
  184.     if (container)
  185.         ODSessionMustHaveCMAllocReserve(container);
  186.     
  187.     if (CMGetNextReference(_fValue, _fReference) != kODNULL) {
  188.         ODBlockMove(_fReference, ref, kODStorageUnitRefSize);
  189.         _fNotComplete = kODTrue;
  190.     }
  191.     else
  192.         _fNotComplete = kODFalse;
  193.     
  194.     if (container)
  195.         ODSessionRestoreCMAllocReserve(container);
  196.     
  197.      }
  198.      catch (ODException _exception)
  199.      {
  200.             ODSetSOMException(ev, _exception);
  201.      }
  202. }
  203.  
  204. //------------------------------------------------------------------------------
  205. // CMStorageUnitRefIterator::IsNotComplete
  206. //------------------------------------------------------------------------------
  207.  
  208. SOM_Scope ODBoolean  SOMLINK CMStorageUnitRefIteratorIsNotComplete(CMStorageUnitRefIterator *somSelf, Environment *ev)
  209. {
  210.     CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
  211.     CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorIsNotComplete");
  212.  
  213.     return _fNotComplete;
  214. }
  215.