home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mandlcpp.zip / tree.h < prev   
C/C++ Source or Header  |  1993-06-24  |  2KB  |  76 lines

  1. #ifndef TREE_H
  2. #define TREE_H
  3.  
  4.  
  5. #include "chain.h"
  6.  
  7.  
  8. #define idForeachTreeDestructPostChilds (idForeachChainElementLast + 1)
  9. #define idForeachTreeSort (idForeachChainElementLast + 2)
  10. #define idForeachTreeLast (idForeachChainElementLast + 2)
  11.  
  12.  
  13. #define idGetChainElementTreeThis 0
  14. #define idGetChainElementTreeLast 0
  15. class tree : public chainElement, public chain
  16. {    public:
  17.     // Do not overload this function! Use toBeCalledPre() and toBeCalledPost()
  18.     virtual int toBeCalledForeachElement(unsigned int iMsg, void *pDummy);
  19.     virtual int toBeCalledPre(unsigned int iMsg, void *pDummy);
  20.     virtual int toBeCalledPost(unsigned int iMsg, void *pDummy);
  21.     tree(chain *pParent);
  22.     virtual ~tree(void);
  23.     // Calls bubbleSort() for every member
  24.     virtual void bubbleSortTree(unsigned int iMsg);
  25.     virtual void *getChainElementMember(unsigned int iMsg)
  26.     {    switch (iMsg)
  27.         {    default:
  28.                 abort();
  29.                 return (void*)"Hallo Peter";
  30.             case idGetChainElementTreeThis:
  31.                 return (void *)this;
  32.         }
  33.     }
  34.     virtual void *getChainMember(unsigned int iMsg)
  35.     {       switch (iMsg)
  36.         {    default:
  37.                 return getChainElementMember(iMsg);
  38.         }
  39.     }
  40.     tree *getParent(void)
  41.     {    return (tree*)pParent->getChainMember(idGetChainElementTreeThis);
  42.     }
  43.     unsigned int getDepth(void)
  44.     {    if (pParent)
  45.             return getParent()->getDepth() + 1;
  46.         else
  47.             return 0;
  48.     }
  49.     tree *getRoot(void)
  50.     {    if (pParent)
  51.             return getParent()->getRoot();
  52.         else
  53.             return this;
  54.     }
  55.     Boolean hasSameRoot(tree *pTree)
  56.     {    return getRoot() == pTree->getRoot();
  57.     }
  58.     tree *getHighestCommonRoot(tree *pTree)
  59.     {    unsigned int iDepth0;
  60.         unsigned int iDepth1;
  61.  
  62.         if (pTree == this)
  63.             return this;
  64.         if ((iDepth0 = getDepth()) > (iDepth1 = pTree->getDepth()))
  65.             return getParent()->getHighestCommonRoot(pTree);
  66.         else
  67.             if (iDepth0 < iDepth1)
  68.                 return getHighestCommonRoot(pTree->getParent());
  69.             else
  70.                 return getParent()->getHighestCommonRoot(pTree->getParent());
  71.     }
  72. };
  73.  
  74.  
  75. #endif /* !TREE_H */
  76.