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 / Layout / FacetItr.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-22  |  3.8 KB  |  164 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        FacetM.cpp
  3.  
  4.     Contains:    Implementation of class ODFacetIterator
  5.  
  6.     Owned by:    Joshua Susser
  7.  
  8.     Copyright:    © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <5>      8/3/95    RR        #1257260: Collapse B classes. Remove
  13.                                     somInit methods. Don't call IsInitialized
  14.                                     or SubclassResponsibility
  15.          <4>     5/26/95    RR        #1251403: Multithreading naming support
  16.          <3>     5/25/95    jpa        List.h --> LinkList.h [1253324]
  17.          <2>      5/2/95    JBS        1244569 Layout iterators need SOM exception
  18.                                     handling; 1243361 FrameFacetIterator should
  19.                                     throw kODErrIteratorNotInitialized
  20.          <1>     6/29/94    JBS        first checked in
  21.          <0>     6/29/94    SV        SOMverted
  22.     
  23.     In Progress:
  24.         
  25. */
  26.  
  27. #define ODFacetIterator_Class_Source
  28.  
  29. #ifndef SOM_ODFacetIterator_xih
  30. #define VARIABLE_MACROS
  31. #include <FacetItr.xih>
  32. #endif
  33.  
  34. #ifndef SOM_ODFacet_xh
  35. #include <Facet.xh>
  36. #endif
  37.  
  38. #ifndef _FACETNOD_
  39. #include "FacetNod.h"
  40. #endif
  41.  
  42. #ifndef _LINKLIST_
  43. #include "LinkList.h"
  44. #endif
  45.  
  46. #ifndef _NODE_
  47. #include "Node.h"
  48. #endif
  49.  
  50. #ifndef _EXCEPT_
  51. #include "Except.h"
  52. #endif
  53.  
  54. #ifndef _ODUTILS_
  55. #include <ODUtils.h>
  56. #endif
  57.  
  58. #ifndef _ODTYPES_
  59. #include <ODTypes.h>
  60. #endif
  61.  
  62. #ifndef _ODMEMORY_
  63. #include "ODMemory.h"
  64. #endif
  65.  
  66. #pragma segment ODFacet
  67.  
  68. SOM_Scope void  SOMLINK ODFacetIteratorsomUninit(ODFacetIterator *somSelf)
  69. {
  70.     ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
  71.     ODFacetIteratorMethodDebug("ODFacetIterator","somUninit");
  72.  
  73.     delete _fNodeTraverser;
  74.     ODFacetIterator_parents_somUninit(somSelf);
  75. }
  76.  
  77. SOM_Scope void  SOMLINK ODFacetIteratorInitFacetIterator(ODFacetIterator *somSelf, Environment *ev,
  78.         ODFacet* facet,
  79.         ODTraversalType traversalType,
  80.         ODSiblingOrder siblingOrder)
  81. {
  82.     ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
  83.     ODFacetIteratorMethodDebug("ODFacetIterator","ODFacetIteratorInitFacetIterator");
  84.  
  85.     SOM_TRY
  86.     
  87.         /* Moved from somInit. SOM itself sets fields to zero
  88.         _fFacet = kODNULL;
  89.         _fNodeTraverser = kODNULL;
  90.         */
  91.         somSelf->InitObject(ev);
  92.     
  93.         _fFacet = facet;
  94.         _fTraversalType = traversalType;
  95.         _fSiblingOrder = siblingOrder;
  96.     SOM_CATCH_ALL
  97.     SOM_ENDTRY
  98. }
  99.  
  100. SOM_Scope ODFacet*  SOMLINK ODFacetIteratorFirst(ODFacetIterator *somSelf, Environment *ev)
  101. {
  102.     ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
  103.     ODFacetIteratorMethodDebug("ODFacetIterator","First");
  104.  
  105.     SOM_TRY
  106.         if (!_fNodeTraverser)
  107.         {
  108.             _fNodeTraverser = new NodeTraverser(_fFacet->GetNode(ev),
  109.                                                 _fTraversalType, _fSiblingOrder);
  110.             THROW_IF_NULL(_fNodeTraverser);
  111.         }
  112.     
  113.         FacetNode* node = (FacetNode*) _fNodeTraverser->First();
  114.         return node ? node->GetFacet() : (ODFacet*)kODNULL;
  115.     SOM_CATCH_ALL
  116.     SOM_ENDTRY
  117.     return kODNULL;
  118. }
  119.  
  120. SOM_Scope ODFacet*  SOMLINK ODFacetIteratorNext(ODFacetIterator *somSelf, Environment *ev)
  121. {
  122.     ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
  123.     ODFacetIteratorMethodDebug("ODFacetIterator","Next");
  124.  
  125.     SOM_TRY
  126.         if ( !_fNodeTraverser )
  127.             THROW(kODErrIteratorNotInitialized);
  128.  
  129.         FacetNode* node = (FacetNode*) _fNodeTraverser->Next();
  130.         return node ? node->GetFacet() : (ODFacet*)kODNULL;
  131.     SOM_CATCH_ALL
  132.     SOM_ENDTRY
  133.     return kODNULL;
  134. }
  135.  
  136. SOM_Scope void  SOMLINK ODFacetIteratorSkipChildren(ODFacetIterator *somSelf, Environment *ev)
  137. {
  138.     ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
  139.     ODFacetIteratorMethodDebug("ODFacetIterator","SkipChildren");
  140.  
  141.     SOM_TRY
  142.         if ( !_fNodeTraverser )
  143.             THROW(kODErrIteratorNotInitialized);
  144.  
  145.         _fNodeTraverser->SkipChildren();
  146.     SOM_CATCH_ALL
  147.     SOM_ENDTRY
  148. }
  149.  
  150. SOM_Scope ODBoolean  SOMLINK ODFacetIteratorIsNotComplete(ODFacetIterator *somSelf, Environment *ev)
  151. {
  152.     ODFacetIteratorData *somThis = ODFacetIteratorGetData(somSelf);
  153.     ODFacetIteratorMethodDebug("ODFacetIterator","IsNotComplete");
  154.  
  155.     SOM_TRY
  156.         if ( !_fNodeTraverser )
  157.             THROW(kODErrIteratorNotInitialized);
  158.  
  159.         return _fNodeTraverser->IsNotComplete();
  160.     SOM_CATCH_ALL
  161.     SOM_ENDTRY
  162.     return kODNULL;
  163. }
  164.