#include <iostream>
#include "list2.h"

using namespace std;

int list::nid = 0;

list::list() : id(nid), prev(0), next(0)
{
    ++nid;
}

list::~list()
{
    remove();
}

list *list::remove() 
{ 
    if ( prev ) prev->next = next; 
    if ( next ) next->prev = prev; 
    next = prev = 0; 
    return this;
}

void list::append( list *lp) 
{ 
    next = lp->next; 
    lp->next = this; 
    prev = lp; 
    if ( next ) next->prev = this; 
}

void list::insert( list *lp) 
{ 
    prev = lp->prev; 
    lp->prev = this; 
    next = lp; 
    if ( prev ) prev->next = this; 
}

void list::print( ostream& os) const
{
    os << "[ id = " << id << " ]";
}

ostream& operator<<( ostream& os, const list &l)
{
    l.print(os);
    return os;
}