Listing 6: The line_number_sequence non-inline member definitions

// sequence.cpp

#include <stdio.h>

#include "deep.h"
#include "sequence.h"

struct line_number_sequence::list_node
    {
    unsigned number;
    deep_pointer<list_node> next;
    };

line_number_sequence::
line_number_sequence(unsigned n)
    {
    first = new list_node;
    first->number = n;
    first->next = NULL;
    last = first;
    }

void line_number_sequence::add(unsigned n)
    {
    if (n != last->number)
        {
        last->next = new list_node;
        last = last->next;
        last->number = n;
        last->next = NULL;
        }
    }

void line_number_sequence::put() const
    {
    list_node const *p;
    for (p = first; p != NULL; p = p->next)
        printf(" %4d", p->number);
    }