/////////////////////////////////////////////////////////////////////////////
// link.cc
//
// SIMLIB version: 2.18
// Date: 2004-01-25
//
// Copyright (c) 1991-2004 Petr Peringer 
//
// This library is licensed under GNU Library GPL. See the file COPYING.
//

//
// description: base class for list items
//

////////////////////////////////////////////////////////////////////////////
// interface
//

#include "simlib.h"
#include "internal.h"


////////////////////////////////////////////////////////////////////////////
// implementation
//

SIMLIB_IMPLEMENTATION

#define CHECK() if(!this) SIMLIB_error(BadLinkRef);

////////////////////////////////////////////////////////////////////////////
//  Link constructors
//
Link::Link() :
  pred(0), succ(0), head(0)
{
}

Link::Link(Link *p, Link *s, List *h) :
  pred(p), succ(s), head(h)
{
}

////////////////////////////////////////////////////////////////////////////
//  Link destructor
//
Link::~Link() {
  if (head)
    SIMLIB_error(LinkDelError);   // remove non-linked item
}

////////////////////////////////////////////////////////////////////////////
//  Into - inserts item to the list end
//
void Link::Into(List *l)
{
  if (head)
    Out();                   // if in list then remove
  l->InsLast(this);          // insert at end of list
}

////////////////////////////////////////////////////////////////////////////
//  Out - takes item from list
//
void Link::Out()
{
  if (head)
    head->Get(this);
  else
    SIMLIB_error(LinkOutError);      // not in list
}

/**************************************
////////////////////////////////////////////////////////////////////////////
//
//
void Link::Follow(Link *li)       // zaradi se za li
{
  if (!li) SIMLIB_error(LinkRefError);
  if (head) Out();                // je-li zarazen, vyradi
  if (li->head) li->head->PostIns(li);
  else          SIMLIB_error();
}

////////////////////////////////////////////////////////////////////////////
//
//
void Link::Precede(Link *li)      // zaradi se pred li
{
  if (!li) SIMLIB_error(LinkRefError);
  if (head) Out();                // je-li zarazen, vyradi
  if (li->head) li->head->PredIns(li);
  else          SIMLIB_error();
}
***************************************/


////////////////////////////////////////////////////////////////////////////
// end of LINK.CPP
////////////////////////////////////////////////////////////////////////////



syntax highlighted by Code2HTML, v. 0.9.1