home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_09_01 / 9n01068a < prev    next >
Text File  |  1990-11-19  |  1KB  |  60 lines

  1. // TREE.HPP - interface definition for in-memory balanced binary trees
  2.  
  3. #ifndef _TREE_HPP
  4. #define _TREE_HPP
  5.  
  6. #include <stddef.h>
  7.  
  8. class TREE
  9.    {
  10. private:
  11.    struct NODE    
  12.       {
  13.       struct node *left, *right;
  14.       unsigned int balance;
  15.       size_t dsize;                 // size of the data area
  16.       void *data;
  17.       } NODE;
  18.  
  19.    typedef enum tree_err
  20.       {
  21.       OK,
  22.       MEM_ALLOC_FAIL,
  23.       NO_DUPES,
  24.       TREE_EMPTY,
  25.       NO_SUCH_NODE
  26.       } TREE_ERR;
  27.  
  28.    NODE *head;
  29.    NODE *current;
  30.    TREE_ERR errval;              // error value produced by last operation
  31.  
  32.    void delete_subtree(NODE *nodeptr);
  33.    void rebalance(NODE *parent);
  34.    int  addnode(NODE *parent, NODE *newnode);
  35.    NODE *findnode(NODE *currnode, void *key);
  36.    int remove_node(NODE *currnode, void *key);
  37.    int getnext(NODE *currnode);
  38.    int getprev(NODE *currnode);
  39. protected:
  40.    virtual void alloc_data(NODE *nptr);
  41.    virtual void copy_data(NODE *to, void *from);
  42.    virtual void delete_data(NODE *nptr);
  43.    virtual int compare(void *data1, void *data2, size_t size);
  44. public:
  45.    TREE(void);
  46.    ~TREE(void);
  47.    add(void *data, size_t size);
  48.    remove(void *data);
  49.    void *find(void *data);
  50.    void *findfirst(void);
  51.    void *findnext(void);
  52.    void *findlast(void);
  53.    void *findprev(void);
  54.    void *findcurr(void) {return current->data;}
  55.    void print_tree(void);
  56.    TREE_ERR last_error(void)  {return errval;}
  57.    };
  58.  
  59. #endif   // ifndef _TREE_HPP
  60.