//**********************************************************************************
//    REJECT.EXE - Reject data table builder for DOOM
//    Copyright (C) 1994 L.M.WITEK 
//
//    This program is free software; you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation; either version 1, or (at your option)
//    any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program; if not, write to the Free Software
//    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//**********************************************************************************

/*********************************************************************************
**
**  MODULE: LIST - Implemetation of a Doubly linked list
**
*********************************************************************************/

#include "list.hpp"

/*********************************************************************************
**
**  FUNCTION: Add an CLink Object to the start of the linked list.
**
**  ENTRY: Pointer to a Clink
**
*********************************************************************************/

void CList::AddItem (CLink *link)
{
     link->next = base;
     if (base)
          base->prev = link;
     base = link;
}
   
/*********************************************************************************
**
**  FUNCTION: Remove an item from the list and delete it.
**
**  ENTRY:   link = pointer to the link to delete.
**
*********************************************************************************/
   
void CList::DeleteItem (CLink *link)
{
     CLink *prev;
     CLink *next;
     
     if (link)
     {
          prev = link->prev;          
          next = link->next;
     
          delete link;
     
          if (prev) 
               prev->next = next;
          else
               base = next;
               
          if (next) next->prev = prev;
     }
}                


/*********************************************************************************
**
**  FUNCTION: Walks the list of CLinks and deletes each link.
**
*********************************************************************************/

void CList::DeleteAll ()
{
     CLink *temp;

     while (base)
     {
          temp   = base->next;        
          delete base;
          base  = temp;
     }
}

/*********************************************************************************
**
**  FUNCTION:  Clist Destructor. Walks the list of CLinks and deletes each link.
**
*********************************************************************************/

CList::~CList ()
{
     DeleteAll ();
}
