Listing 4: The cross-reference table class and inline member function definitions, using strings

// table.h

#ifndef TABLE_H_INCLUDED
#define TABLE_H_INCLUDED

#include <stddef.h>
#include <string>

#include "deep.h"

class cross_reference_table
    {
public:
    cross_reference_table();
    void add(std::string const &w, unsigned n);
    void put() const;
private:
    struct tree_node;
    static tree_node *add_tree
        (tree_node *t, std::string const &w, unsigned n);
    static void put_tree(tree_node const *t);
    deep_pointer<tree_node> root;
    };

inline
cross_reference_table::cross_reference_table()
    {
    root = NULL;
    }

inline
void cross_reference_table::add
    (std::string const &w, unsigned n)
    {
    root = add_tree(root, w, n);
    }

inline
void cross_reference_table::put() const
    {
    put_tree(root);
    }

#endif