home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional Developers Kit 1992 November / Disc01 / Disc01.mdf / cppbeta / bbxxk / itbtre.c__ / ITBTRE.C
Encoding:
Text File  |  1992-10-26  |  4.1 KB  |  110 lines

  1. /* Copyright (c) IBM Corp. 1992 */
  2. template < class Element, class ElementOps, INumber pNumberOfChildren >
  3. Boolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  4. setToRoot () {
  5.   return ivCollection->setToRoot (*this);
  6. }
  7.  
  8. template < class Element, class ElementOps, INumber pNumberOfChildren >
  9. Boolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  10. setToChild (IPosition position) {
  11.   return ivCollection->setToChild (position, *this);
  12. }
  13.  
  14. template < class Element, class ElementOps, INumber pNumberOfChildren >
  15. Boolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  16. setToFirstExistingChild () {
  17.   return ivCollection->setToFirstExistingChild (*this);
  18. }
  19.  
  20. template < class Element, class ElementOps, INumber pNumberOfChildren >
  21. Boolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  22. setToNextExistingChild () {
  23.   return ivCollection->setToNextExistingChild (*this);
  24. }
  25.  
  26. template < class Element, class ElementOps, INumber pNumberOfChildren >
  27. Boolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  28. setToLastExistingChild () {
  29.   return ivCollection->setToLastExistingChild (*this);
  30. }
  31.  
  32. template < class Element, class ElementOps, INumber pNumberOfChildren >
  33. Boolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  34. setToPreviousExistingChild () {
  35.   return ivCollection->setToPreviousExistingChild (*this);
  36. }
  37.  
  38. template < class Element, class ElementOps, INumber pNumberOfChildren >
  39. Boolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  40. isValid () const {
  41.   return ivNode != 0 && *ivNode != 0;
  42. }
  43.  
  44. template < class Element, class ElementOps, INumber pNumberOfChildren >
  45. void IGTabularTree < Element, ElementOps, pNumberOfChildren >::Cursor::
  46. invalidate () {
  47.   ivNode = 0;
  48. }
  49.  
  50. template < class Element, class ElementOps, int numberOfChildren >
  51. void IGTabularTree < Element, ElementOps, numberOfChildren >::
  52. copySubtree (Node*& to, Node* from)
  53. { IASSERT (from != 0);
  54.   to = newNode (from->ivElement);
  55.   for (INumber n = 0; n < numberOfChildren; n++) {
  56.     if (from->ivChildren [n] == 0)
  57.       to->ivChildren [n] = 0;
  58.     else
  59.       copySubtree (to->ivChildren [n], from->ivChildren [n]);
  60.       to->ivChildren [n]->ivParent = &to;
  61.   }
  62. }
  63.  
  64. template < class Element, class ElementOps, int numberOfChildren >
  65. INumber IGTabularTree < Element, ElementOps, numberOfChildren >::
  66. removeSubtree (Node* node)
  67. { IASSERT (node != 0);
  68.   INumber result = 0;
  69.   for (INumber n = 0; n < numberOfChildren; n++) {
  70.     if (node->ivChildren [n] != 0)
  71.       result += removeSubtree (node->ivChildren [n]);
  72.   }
  73.   delete node;
  74.   return result + 1;
  75. }
  76.  
  77. template < class Element, class ElementOps, INumber pNumberOfChildren >
  78. Boolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::
  79. constantFunctionIteration (void *iterationFunction,
  80.                void* env,
  81.                void const* node) {
  82.   return (*(Boolean (*) (Element const&, void*)) iterationFunction)
  83.            (((Node const*)node)->ivElement, env);
  84. }
  85.  
  86. template < class Element, class ElementOps, INumber pNumberOfChildren >
  87. Boolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::
  88. functionIteration (void *iterationFunction, void* env, void* node) {
  89.   return (*(Boolean (*) (Element&, void*)) iterationFunction)
  90.            (((Node*)node)->ivElement, env);
  91. }
  92.    
  93. template < class Element, class ElementOps, INumber pNumberOfChildren >
  94. Boolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::
  95. constantIteratorIteration (void* iterator, void const* node) {
  96.   return ((IConstantIterator < Element >*)iterator)->
  97.            applyTo (((Node const*)node)->ivElement);
  98. }
  99.  
  100. template < class Element, class ElementOps, INumber pNumberOfChildren >
  101. Boolean IGTabularTree < Element, ElementOps, pNumberOfChildren >::
  102. iteratorIteration (void* iterator, void* node) {
  103.   return ((IIterator < Element >*)iterator)->
  104.            applyTo (((Node*)node)->ivElement);
  105. }
  106.    
  107. template < class Element, class ElementOps, INumber pNumberOfChildren >
  108. ElementOps IGTabularTree < Element, ElementOps, pNumberOfChildren >::
  109. cvElementOps;
  110.