// table.cpp
#include <stdio.h>
#include <string.h>
#include "deep.h"
#include "table.h"
#include "sequence.h"
struct cross_reference_table::tree_node
{
tree_node(unsigned n);
deep_pointer<char> word;
line_number_sequence lines;
deep_pointer<tree_node> left, right;
};
inline
cross_reference_table::
tree_node::tree_node(unsigned n)
: lines(n)
{
}
cross_reference_table::tree_node *
cross_reference_table::add_tree
(tree_node *t, char const *w, unsigned n)
{
int cmp;
if (t == NULL)
{
t = new tree_node (n);
t->word = new char [strlen(w) + 1];
strcpy(t->word, w);
t->left = t->right = NULL;
}
else if ((cmp = strcmp(w, t->word)) < 0)
t->left = add_tree(t->left, w, n);
else if (cmp > 0)
t->right = add_tree(t->right, w, n);
else
t->lines.add(n);
return t;
}
void
cross_reference_table::put_tree(tree_node const *t)
{
if (t != NULL)
{
put_tree(t->left);
printf("%12s:", t->word);
t->lines.put();
printf("\n");
put_tree(t->right);
}
}