home *** CD-ROM | disk | FTP | other *** search
- /*
- File: FacetM.cpp
-
- Contains: Implementation of class ODFacetIterator
-
- Owned by: Joshua Susser
-
- Copyright: © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <5> 8/3/95 RR #1257260: Collapse B classes. Remove
- somInit methods. Don't call IsInitialized
- or SubclassResponsibility
- <4> 5/26/95 RR #1251403: Multithreading naming support
- <3> 5/25/95 jpa List.h --> LinkList.h [1253324]
- <2> 5/2/95 JBS 1244569 Layout iterators need SOM exception
- handling; 1243361 FrameFacetIterator should
- throw kODErrIteratorNotInitialized
- <1> 6/29/94 JBS first checked in
- <0> 6/29/94 SV SOMverted
-
- In Progress:
-
- */
-
- #define ODFacetIterator_Class_Source
-
- #ifndef SOM_ODFacetIterator_xih
- #define VARIABLE_MACROS
- #include <FacetItr.xih>
- #endif
-
- #ifndef SOM_ODFacet_xh
- #include <Facet.xh>
- #endif
-
- #ifndef _FACETNOD_
- #include "FacetNod.h"
- #endif
-
- #ifndef _LINKLIST_
- #include "LinkList.h"
- #endif
-
- #ifndef _NODE_
- #include "Node.h"
- #endif
-
- #ifndef _EXCEPT_
- #include "Except.h"
- #endif
-
- #ifndef _ODUTILS_
- #include <ODUtils.h>
- #endif
-
- #ifndef _ODTYPES_
- #include <ODTypes.h>
- #endif
-
- #ifndef _ODMEMORY_
- #include "ODMemory.h"
- #endif
-
- #pragma segment ODFacet
-
- SOM_Scope void SOMLINK ODFacetIteratorsomUninit(ODFacetIterator *somSelf)
- {
- ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
- ODFacetIteratorMethodDebug("ODFacetIterator","somUninit");
-
- delete _fNodeTraverser;
- ODFacetIterator_parents_somUninit(somSelf);
- }
-
- SOM_Scope void SOMLINK ODFacetIteratorInitFacetIterator(ODFacetIterator *somSelf, Environment *ev,
- ODFacet* facet,
- ODTraversalType traversalType,
- ODSiblingOrder siblingOrder)
- {
- ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
- ODFacetIteratorMethodDebug("ODFacetIterator","ODFacetIteratorInitFacetIterator");
-
- SOM_TRY
-
- /* Moved from somInit. SOM itself sets fields to zero
- _fFacet = kODNULL;
- _fNodeTraverser = kODNULL;
- */
- somSelf->InitObject(ev);
-
- _fFacet = facet;
- _fTraversalType = traversalType;
- _fSiblingOrder = siblingOrder;
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- SOM_Scope ODFacet* SOMLINK ODFacetIteratorFirst(ODFacetIterator *somSelf, Environment *ev)
- {
- ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
- ODFacetIteratorMethodDebug("ODFacetIterator","First");
-
- SOM_TRY
- if (!_fNodeTraverser)
- {
- _fNodeTraverser = new NodeTraverser(_fFacet->GetNode(ev),
- _fTraversalType, _fSiblingOrder);
- THROW_IF_NULL(_fNodeTraverser);
- }
-
- FacetNode* node = (FacetNode*) _fNodeTraverser->First();
- return node ? node->GetFacet() : (ODFacet*)kODNULL;
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- SOM_Scope ODFacet* SOMLINK ODFacetIteratorNext(ODFacetIterator *somSelf, Environment *ev)
- {
- ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
- ODFacetIteratorMethodDebug("ODFacetIterator","Next");
-
- SOM_TRY
- if ( !_fNodeTraverser )
- THROW(kODErrIteratorNotInitialized);
-
- FacetNode* node = (FacetNode*) _fNodeTraverser->Next();
- return node ? node->GetFacet() : (ODFacet*)kODNULL;
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- SOM_Scope void SOMLINK ODFacetIteratorSkipChildren(ODFacetIterator *somSelf, Environment *ev)
- {
- ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
- ODFacetIteratorMethodDebug("ODFacetIterator","SkipChildren");
-
- SOM_TRY
- if ( !_fNodeTraverser )
- THROW(kODErrIteratorNotInitialized);
-
- _fNodeTraverser->SkipChildren();
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- SOM_Scope ODBoolean SOMLINK ODFacetIteratorIsNotComplete(ODFacetIterator *somSelf, Environment *ev)
- {
- ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
- ODFacetIteratorMethodDebug("ODFacetIterator","IsNotComplete");
-
- SOM_TRY
- if ( !_fNodeTraverser )
- THROW(kODErrIteratorNotInitialized);
-
- return _fNodeTraverser->IsNotComplete();
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-