home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_09_07 / 9n07116c < prev    next >
Text File  |  1991-05-09  |  1KB  |  80 lines

  1. /*
  2.  * xrt.cpp - cross-reference table
  3.  */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. #include "ln_seq.h"
  9. #include "xrt.h"
  10.  
  11. struct treenode
  12.     {
  13.     char *word;
  14.     ln_seq lines;
  15.     treenode *left, *right;
  16.     treenode(unsigned n);
  17.     ~treenode();
  18.     };
  19.  
  20. treenode::treenode(unsigned n) : lines(n) { }
  21.  
  22. treenode::~treenode()
  23.     {
  24.     delete word;
  25.     delete left;
  26.     delete right;
  27.     }
  28.  
  29. static treenode *addtree
  30.     (treenode *t, char *w, unsigned n)
  31.     {
  32.     int cond;
  33.  
  34.     if (t == 0)
  35.         {
  36.         t = new treenode(n);
  37.         t->word = new char[strlen(w) + 1];
  38.         strcpy(t->word, w);
  39.         t->left = t->right = 0;
  40.         }
  41.     else if ((cond = strcmp(w, t->word)) == 0)
  42.         t->lines.add(n);
  43.     else if (cond < 0)
  44.         t->left = addtree(t->left, w, n);
  45.     else
  46.         t->right = addtree(t->right, w, n);
  47.     return t;
  48.     }
  49.  
  50. static void printtree(treenode *t)
  51.     {
  52.     if (t != 0)
  53.         {
  54.         printtree(t->left);
  55.         printf("%12s: ", t->word);
  56.         t->lines.print();
  57.         printf("\n");
  58.         printtree(t->right);
  59.         }
  60.     }
  61.  
  62. static treenode *root = 0;
  63.  
  64. void xrt_add(char *w, unsigned n)
  65.     {
  66.     root = addtree(root, w, n);
  67.     }
  68.  
  69. void xrt_destroy(void)
  70.     {
  71.     delete root;
  72.     }
  73.  
  74. void xrt_print(void)
  75.     {
  76.     printtree(root);
  77.     }
  78.  
  79.  
  80.