Listing 3: The cross-reference table non-inline member function definitions, still using character pointers instead of strings
// 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); } }