home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v1.zip / IBMCPP / IBMCLASS / ITBTRE.C < prev    next >
Text File  |  1993-09-22  |  5KB  |  123 lines

  1. /*******************************************************************************
  2. *                                                                              *
  3. * COPYRIGHT:                                                                   *
  4. *   IBM C/C++ Tools Version 2.01 - Collection Class Library                    *
  5. *   Licensed Materials - Property of IBM                                       *
  6. *   (C) Copyright IBM Corporation 1992, 1993                                   *
  7. *   All Rights Reserved                                                        *
  8. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  9. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  10. *                                                                              *
  11. *******************************************************************************/
  12. template < class Element, class ElementOps, INumber pNumberOfChildren >
  13. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  14. setToRoot () {
  15.   return ivCollection->setToRoot (*this);
  16. }
  17.  
  18. template < class Element, class ElementOps, INumber pNumberOfChildren >
  19. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  20. setToChild (IPosition position) {
  21.   return ivCollection->setToChild (position, *this);
  22. }
  23.  
  24. template < class Element, class ElementOps, INumber pNumberOfChildren >
  25. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  26. setToParent () {
  27.   return ivCollection->setToParent (*this);
  28. }
  29.  
  30. template < class Element, class ElementOps, INumber pNumberOfChildren >
  31. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  32. setToFirstExistingChild () {
  33.   return ivCollection->setToFirstExistingChild (*this);
  34. }
  35.  
  36. template < class Element, class ElementOps, INumber pNumberOfChildren >
  37. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  38. setToNextExistingChild () {
  39.   return ivCollection->setToNextExistingChild (*this);
  40. }
  41.  
  42. template < class Element, class ElementOps, INumber pNumberOfChildren >
  43. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  44. setToLastExistingChild () {
  45.   return ivCollection->setToLastExistingChild (*this);
  46. }
  47.  
  48. template < class Element, class ElementOps, INumber pNumberOfChildren >
  49. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  50. setToPreviousExistingChild () {
  51.   return ivCollection->setToPreviousExistingChild (*this);
  52. }
  53.  
  54. template < class Element, class ElementOps, INumber pNumberOfChildren >
  55. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  56. isValid () const {
  57.   return ivNode != 0;
  58. }
  59.  
  60. template < class Element, class ElementOps, INumber pNumberOfChildren >
  61. void IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  62. invalidate () {
  63.   ivNode = 0;
  64. }
  65.  
  66. template < class Element, class ElementOps, int numberOfChildren >
  67. void IGTabularTree < Element, ElementOps, numberOfChildren >::
  68. copySubtree (Node*& to, Node* from)
  69. { IASSERT (from != 0);
  70.   to = newNode (from->ivElement);
  71.   for (INumber n = 0; n < numberOfChildren; n++) {
  72.     if (from->ivChildren [n] == 0)
  73.       to->ivChildren [n] = 0;
  74.     else {
  75.       copySubtree (to->ivChildren [n], from->ivChildren [n]);
  76.       to->ivChildren [n]->ivParent = to;
  77.     }
  78.   }
  79. }
  80.  
  81. template < class Element, class ElementOps, int numberOfChildren >
  82. INumber IGTabularTree < Element, ElementOps, numberOfChildren >::
  83. removeSubtree (Node* node)
  84. { IASSERT (node != 0);
  85.   INumber result = 0;
  86.   for (INumber n = 0; n < numberOfChildren; n++) {
  87.     if (node->ivChildren [n] != 0)
  88.       result += removeSubtree (node->ivChildren [n]);
  89.   }
  90.   delete node;
  91.   return result + 1;
  92. }
  93.  
  94. template < class Element, class ElementOps, INumber pNumberOfChildren >
  95. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::
  96. constantFunctionIteration (void *iterationFunction,
  97.                            void* env,
  98.                            void const* node) {
  99.   return (*(IBoolean (*) (Element const&, void*)) iterationFunction)
  100.            (((Node const*)node)->ivElement, env);
  101. }
  102.  
  103. template < class Element, class ElementOps, INumber pNumberOfChildren >
  104. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::
  105. functionIteration (void *iterationFunction, void* env, void* node) {
  106.   return (*(IBoolean (*) (Element&, void*)) iterationFunction)
  107.            (((Node*)node)->ivElement, env);
  108. }
  109.  
  110. template < class Element, class ElementOps, INumber pNumberOfChildren >
  111. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::
  112. constantIteratorIteration (void* iterator, void const* node) {
  113.   return ((IConstantIterator < Element >*)iterator)->
  114.            applyTo (((Node const*)node)->ivElement);
  115. }
  116.  
  117. template < class Element, class ElementOps, INumber pNumberOfChildren >
  118. IBoolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::
  119. iteratorIteration (void* iterator, void* node) {
  120.   return ((IIterator < Element >*)iterator)->
  121.            applyTo (((Node*)node)->ivElement);
  122. }
  123.