// This may look like C code, but it is really -*- C++ -*- // WARNING: This file is obsolete. Use ../SLList.h, if you can. /* Copyright (C) 1988 Free Software Foundation written by Doug Lea (dl@rocky.oswego.edu) This file is part of the GNU C++ Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _SLList_h #ifdef __GNUG__ #pragma interface #endif #define _SLList_h 1 #include #include ".defs.h" #ifndef _SLListNode_h #define _SLListNode_h 1 struct SLListNode { SLListNode* tl; hd; SLListNode() { } SLListNode(const h, SLListNode* t = 0); ~SLListNode() { } }; inline SLListNode::SLListNode(const h, SLListNode* t) :hd(h), tl(t) {} typedef SLListNode* SLListNodePtr; #endif class SLList { protected: SLListNode* last; public: SLList(); SLList(const SLList& a); ~SLList(); SLList& operator = (const SLList& a); int empty(); int length(); void clear(); Pix prepend( item); Pix append( item); void join(SLList&); Pix prepend(SLListNode*); Pix append(SLListNode*); & operator () (Pix p); Pix first(); void next(Pix& p); int owns(Pix p); Pix ins_after(Pix p, item); void del_after(Pix p); & front(); & rear(); remove_front(); int remove_front(& x); void del_front(); void error(const char* msg); int OK(); }; inline SLList::~SLList() { clear(); } inline SLList::SLList() { last = 0; } inline int SLList::empty() { return last == 0; } inline Pix SLList::first() { return (last == 0)? 0 : Pix(last->tl); } inline void SLList::next(Pix& p) { p = (p == 0 || p == last)? 0 : Pix(((SLListNode*)(p))->tl); } inline & SLList::operator () (Pix p) { if (p == 0) error("null Pix"); return ((SLListNode*)(p))->hd; } inline & SLList::front() { if (last == 0) error("front: empty list"); return last->tl->hd; } inline & SLList::rear() { if (last == 0) error("rear: empty list"); return last->hd; } #endif