home *** CD-ROM | disk | FTP | other *** search
- /*
- File: CMSURefI.cpp
-
- Contains: Implementation for CMStorageUnitRefIterator class.
-
- Owned by: Vincent Lo
-
- Copyright: © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <6> 10/24/95 jpa 1293441: DM/VL: Bento memory reserve &
- fatal container err.
- <5> 10/8/95 TJ Fixes Recomended by Refball
- <4> 8/3/95 RR #1257260: Collapse B classes. Remove
- somInit methods. Don't call IsInitialized
- or SubclassResponsibility
- <3> 5/26/95 VL 1251403: Multithreading naming support.
- <2> 1/26/95 VL #???: SURef is now a 4-byte array.
- <1> 7/5/94 VL first checked in
-
- To Do:
- In Progress:
-
- */
-
- #define CMStorageUnitRefIterator_Class_Source
- #define VARIABLE_MACROS
- #include <CMSURefI.xih>
-
- #ifndef SOM_CMStorageUnit_xh
- #include <CMSU.xh>
- #endif
-
- #ifndef _EXCEPT_
- #include "Except.h"
- #endif
-
- #ifndef __CM_API__
- #include "CMAPI.h"
- #endif
-
- #ifndef _SESSHDR_
- #include "SessHdr.h"
- #endif
-
-
- //==============================================================================
- // Function Prototype
- //==============================================================================
-
- inline void BREAK_AND_THROW(ODError err)
- {
- THROW(err);
- }
-
- //==============================================================================
- // CMStorageUnitRefIterator
- //==============================================================================
-
- //------------------------------------------------------------------------------
- // CMStorageUnitRefIterator::~CMStorageUnitRefIterator
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK CMStorageUnitRefIteratorsomUninit(CMStorageUnitRefIterator *somSelf)
- {
- CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
- CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorsomUninit");
-
- CMStorageUnitRefIterator_parent_ODStorageUnitRefIterator_somUninit(somSelf);
- }
-
- //------------------------------------------------------------------------------
- // CMStorageUnitRefIterator::InitStorageUnitRefIterator
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK CMStorageUnitRefIteratorInitStorageUnitRefIterator(CMStorageUnitRefIterator *somSelf, Environment *ev,
- ODStorageUnit* storageUnit)
- {
- CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
- CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorInitStorageUnitRefIterator");
-
- SOM_TRY
-
- /* Moved from somInit. SOM itself sets fields to zero
- _fValue = kODNULL;
- *((ODULong*) _fReference) = 0;
- */
- _fNotComplete = kODTrue;
-
- CMStorageUnitRefIterator_parent_ODStorageUnitRefIterator_InitStorageUnitRefIterator(somSelf,ev,storageUnit);
-
- CMValue value = ((CMStorageUnit*) storageUnit)->GetCurValue(ev);
-
- if (value == kODNULL)
- BREAK_AND_THROW(kODErrUnfocusedStorageUnit);
- _fValue = value;
-
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // CMStorageUnitRefIterator::First
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK CMStorageUnitRefIteratorFirst(CMStorageUnitRefIterator *somSelf, Environment *ev,
- ODStorageUnitRef ref)
- {
- CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
- CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorFirst");
-
- SOM_TRY
-
- CMContainer container = (_fValue)? CMGetValueContainer(_fValue) : (CMContainer) kODNULL;
- if (container)
- ODSessionMustHaveCMAllocReserve(container);
-
- *((ODULong*) _fReference) = 0;
- if (CMGetNextReference(_fValue, _fReference) != kODNULL) {
- ODBlockMove(_fReference, ref, kODStorageUnitRefSize);
- _fNotComplete = kODTrue;
- }
- else
- _fNotComplete = kODFalse;
-
- if (container)
- ODSessionRestoreCMAllocReserve(container);
-
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // CMStorageUnitRefIterator::Next
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK CMStorageUnitRefIteratorNext(CMStorageUnitRefIterator *somSelf, Environment *ev,
- ODStorageUnitRef ref)
- {
- CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
- CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorNext");
-
- SOM_TRY
-
- CMContainer container = (_fValue)? CMGetValueContainer(_fValue) : (CMContainer) kODNULL;
- if (container)
- ODSessionMustHaveCMAllocReserve(container);
-
- if (CMGetNextReference(_fValue, _fReference) != kODNULL) {
- ODBlockMove(_fReference, ref, kODStorageUnitRefSize);
- _fNotComplete = kODTrue;
- }
- else
- _fNotComplete = kODFalse;
-
- if (container)
- ODSessionRestoreCMAllocReserve(container);
-
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // CMStorageUnitRefIterator::IsNotComplete
- //------------------------------------------------------------------------------
-
- SOM_Scope ODBoolean SOMLINK CMStorageUnitRefIteratorIsNotComplete(CMStorageUnitRefIterator *somSelf, Environment *ev)
- {
- CMStorageUnitRefIteratorData *somThis = CMStorageUnitRefIteratorGetData(somSelf);
- CMStorageUnitRefIteratorMethodDebug("CMStorageUnitRefIterator","CMStorageUnitRefIteratorIsNotComplete");
-
- return _fNotComplete;
- }
-