home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v1.zip / IBMCPP / IBMCLASS / IITBTRE.H < prev    next >
Text File  |  1993-09-22  |  5KB  |  102 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. #ifndef _IITBTRE_H
  13. #define _IITBTRE_H
  14.  
  15. #include <iglobals.h>
  16.  
  17. class ITabularTreeImpl
  18. {
  19. public:
  20.   class Node
  21.   {
  22.     friend class ITabularTreeImpl;
  23.   public:
  24.     Node* ivParent;
  25.     Node* ivChildren [1];
  26.     // ivChildren contains in fact numberOfChildren node pointers,
  27.     // where numberOfChildren is the template argument of the
  28.     // corresponding ITabularTree.
  29.   };
  30.  
  31.   Node* ivRoot;
  32.   INumber ivNumberOfChildren;
  33.  
  34.   ITabularTreeImpl (INumber numberOfChildren)
  35.   : ivRoot (0), ivNumberOfChildren (numberOfChildren)
  36.   {}
  37.  
  38.   void    initNode                   (Node* node, Node* parent) const;
  39.   INumber numberOfSubtreeElements    (Node const*) const;
  40.   INumber numberOfSubtreeLeaves      (Node const*) const;
  41.   IBoolean isLeaf                     (Node const*) const;
  42.   INumber position                   (Node const*) const;
  43.  
  44.   void    attachSubtreeAsRoot        (ITabularTreeImpl&, Node*);
  45.   void    attachSubtreeAsChild       (Node* to,
  46.                                       IPosition pos,
  47.                                       ITabularTreeImpl&,
  48.                                       Node* from);
  49.  
  50.   IBoolean setToParent                (Node*& node) const;
  51.   IBoolean setToFirstExistingChild    (Node*& node) const;
  52.   IBoolean setToNextExistingChild     (Node*& node) const;
  53.   IBoolean setToLastExistingChild     (Node*& node) const;
  54.   IBoolean setToPreviousExistingChild (Node*& node) const;
  55.  
  56.   IBoolean setToFirst                 (Node*& node,
  57.                                       ITreeIterationOrder order) const;
  58.   IBoolean setToNext                  (Node*& node,
  59.                                       ITreeIterationOrder order) const;
  60.   IBoolean setToLast                  (Node*& node,
  61.                                       ITreeIterationOrder order) const;
  62.   IBoolean setToPrevious              (Node*& node,
  63.                                       ITreeIterationOrder order) const;
  64.  
  65.   IBoolean allElementsDo              (void* function,
  66.                                       ITreeIterationOrder order,
  67.                                       void* env,
  68.                                       IBoolean (*apply) (void *function,
  69.                                                         void* env,
  70.                                                         void* node),
  71.                                       Node* subtreeRoot);
  72.  
  73.   IBoolean allElementsDo              (void* function,
  74.                                       ITreeIterationOrder order,
  75.                                       void* env,
  76.                                       IBoolean (*apply) (void *function,
  77.                                                         void* env,
  78.                                                         void const* node),
  79.                                       Node* subtreeRoot) const;
  80.  
  81.   IBoolean allElementsDo              (void* iterator,
  82.                                       ITreeIterationOrder order,
  83.                                       IBoolean (*apply) (void* iterator,
  84.                                                         void* node),
  85.                                       Node* subtreeRoot);
  86.  
  87.   IBoolean allElementsDo              (void* iterator,
  88.                                       ITreeIterationOrder order,
  89.                                       IBoolean (*apply) (void* iterator,
  90.                                                         void const* node),
  91.                                       Node* subtreeRoot) const;
  92.  
  93.   IBoolean checkNode                  (Node const*, Node const*) const;
  94.   IBoolean checkNode                  (Node const*) const;
  95.  
  96.   IBoolean isConsistent               () const;
  97. protected:
  98.   IBoolean isConsistent               (Node const*) const;
  99. };
  100.  
  101. #endif
  102.