+/*
+ list.tcc -- implement List<T>
+
+ source file of the Flower Library
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
#ifndef LIST_CC
#define LIST_CC
// instantiate a template: explicit instantiation.
-#define L_instantiate(a) template class List<a>; template class Cursor<a>; \
+#define LIST_INSTANTIATE(a) class List<a>; template class Cursor<a>; \
template class Link<a>
#include "list.hh"
template<class T>
-List<T>::List(List const&src)
+List<T>::List (List const&src)
{
- set_empty();
- // probably el stupido
- for (Cursor<T> c(src); c.ok(); c++)
- bottom().add(c);
+ set_empty();
+ // probably el stupido
+ for (Cursor<T> c (src); c.ok(); c++)
+ bottom().add (c);
}
template<class T>
void
List<T>::OK() const
{
- int i = size_;
- Link<T> *lp = top_;
- while (i--) {
- assert(lp);
+ int i = size_;
+ Link<T> *lp = top_;
+ while (i--)
+ {
+ assert (lp);
lp->OK();
lp = lp->next();
}
- assert(!lp);
- i = size_;
- lp = bottom_;
- while (i--) {
- assert(lp);
+ assert (!lp);
+ i = size_;
+ lp = bottom_;
+ while (i--)
+ {
+ assert (lp);
lp->OK();
lp = lp->previous();
}
- assert(!lp);
+ assert (!lp);
}
template<class T>
void
List<T>::junk_links()
{
- Cursor<T> c(*this);
- while (c.ok())
+ Cursor<T> c (*this);
+ while (c.ok())
c.del();
}
template<class T>
List<T>::~List()
{
- junk_links();
+ junk_links();
}
/**
*/
template<class T>
void
-List<T>::add( T const & thing, Cursor<T> &after_me )
+List<T>::add (T const & thing, Cursor<T> &after_me)
{
- if (!size_) { // not much choice if list is empty
- bottom_ = top_ = new Link<T>( thing );
+ if (!size_) { // not much choice if list is empty
+ bottom_ = top_ = new Link<T>( thing);
if (!after_me.ok())
after_me = bottom();
- } else { // add at aprioprate place
+ }
+ else { // add at aprioprate place
if (!after_me.ok())
after_me = bottom();
Link<T> *p =after_me.pointer();
- p->add(thing);
+ p->add (thing);
if (p == bottom_) // adjust bottom_ if necessary.
bottom_ = p->next();
}
- size_++;
+ size_++;
}
template<class T>
void
-List<T>::insert( T const & thing, Cursor<T> &before_me )
+List<T>::insert (T const & thing, Cursor<T> &before_me)
{
- if (!size_) {
- bottom_ = top_ = new Link<T>( thing );
+ if (!size_)
+ {
+ bottom_ = top_ = new Link<T>( thing);
if (!before_me.ok())
before_me = top();
- } else {
+ }
+ else
+ {
if (!before_me.ok())
before_me = top();
Link<T> *p = before_me.pointer() ;
- p->insert(thing);
+ p->insert (thing);
if (p == top_)
top_ = p->previous();
}
- size_++;
+ size_++;
}
template<class T>
void
-List<T>::concatenate(List<T> const&s)
+List<T>::concatenate (List<T> const&s)
{
- Cursor<T> b(bottom());
- for (Cursor<T> c(s); c.ok(); c++) {
- b.add(c);
+ Cursor<T> b (bottom());
+ for (Cursor<T> c (s); c.ok(); c++)
+ {
+ b.add (c);
b++;
}
}