annotate src/SLList.h @ 3961:635209a37bf4

[project @ 2002-06-03 18:15:47 by jwe]
author jwe
date Mon, 03 Jun 2002 18:15:47 +0000
parents d9803711e047
children 6e86256e9c54
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2568
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
1 // This may look like C code, but it is really -*- C++ -*-
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
2 /*
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
3 Copyright (C) 1988, 1992 Free Software Foundation
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
4 written by Doug Lea (dl@rocky.oswego.edu)
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
5
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
6 This file is part of the GNU C++ Library. This library is free
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
7 software; you can redistribute it and/or modify it under the terms of
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
8 the GNU Library General Public License as published by the Free
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
9 Software Foundation; either version 2 of the License, or (at your
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
10 option) any later version. This library is distributed in the hope
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
11 that it will be useful, but WITHOUT ANY WARRANTY; without even the
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
12 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
13 PURPOSE. See the GNU Library General Public License for more details.
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
14 You should have received a copy of the GNU Library General Public
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
15 License along with this library; if not, write to the Free Software
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
16 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
17 */
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
18
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
19 #ifndef _SLList_h
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
20 #define _SLList_h 1
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
21
2580
fa7dd5fc7c59 [project @ 1996-12-10 06:30:41 by jwe]
jwe
parents: 2571
diff changeset
22 #if defined (__GNUG__)
fa7dd5fc7c59 [project @ 1996-12-10 06:30:41 by jwe]
jwe
parents: 2571
diff changeset
23 #pragma interface
fa7dd5fc7c59 [project @ 1996-12-10 06:30:41 by jwe]
jwe
parents: 2571
diff changeset
24 #endif
fa7dd5fc7c59 [project @ 1996-12-10 06:30:41 by jwe]
jwe
parents: 2571
diff changeset
25
2568
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
26 #include <Pix.h>
2616
4cd6d8d8ac29 [project @ 1997-01-22 05:03:26 by jwe]
jwe
parents: 2580
diff changeset
27
4cd6d8d8ac29 [project @ 1997-01-22 05:03:26 by jwe]
jwe
parents: 2580
diff changeset
28 #include "BaseSLList.h"
2568
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
29
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
30 template<class T>
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 2616
diff changeset
31 class
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 2616
diff changeset
32 SLNode : public BaseSLNode
2568
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
33 {
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
34 public:
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
35 T hd; // Data part of node
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
36 SLNode() { }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
37 SLNode(const T& h, SLNode* t = 0)
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
38 : hd(h) { tl = t; }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
39 ~SLNode() { }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
40 };
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
41
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
42 template <class T>
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 2616
diff changeset
43 class
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 2616
diff changeset
44 SLList : public BaseSLList
2568
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
45 {
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
46 private:
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
47 virtual void delete_node(BaseSLNode *node) { delete (SLNode<T>*)node; }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
48 virtual BaseSLNode* copy_node(const void *datum)
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
49 { return new SLNode<T>(*(const T*)datum); }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
50 virtual void copy_item(void *dst, void *src) { *(T*)dst = *(T*)src; }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
51
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
52 public:
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
53 SLList() : BaseSLList() { }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
54 SLList(const SLList<T>& a) : BaseSLList() { copy(a); }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
55 SLList<T>& operator = (const SLList<T>& a)
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
56 { BaseSLList::operator=((const BaseSLList&) a); return *this; }
2580
fa7dd5fc7c59 [project @ 1996-12-10 06:30:41 by jwe]
jwe
parents: 2571
diff changeset
57 ~SLList (void);
2568
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
58
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
59 Pix prepend(const T& item) {return BaseSLList::prepend(&item);}
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
60 Pix append(const T& item) {return BaseSLList::append(&item);}
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
61 Pix prepend(SLNode<T>* node) {return BaseSLList::prepend(node);}
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
62 Pix append(SLNode<T>* node) {return BaseSLList::append(node);}
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
63
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
64 T& operator () (Pix p) {
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
65 if (p == 0) error("null Pix");
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
66 return ((SLNode<T>*)(p))->hd; }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
67 const T& operator () (Pix p) const {
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
68 if (p == 0) error("null Pix");
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
69 return ((SLNode<T>*)(p))->hd; }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
70 inline Pix first() const { return (last == 0) ? 0 : Pix(last->tl); }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
71 void next(Pix& p) const
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
72 { p = (p == 0 || p == last) ? 0 : Pix(((SLNode<T>*)(p))->tl); }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
73 Pix ins_after(Pix p, const T& item)
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
74 { return BaseSLList::ins_after(p, &item); }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
75 void join(SLList<T>& a) { BaseSLList::join(a); }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
76
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
77 T& front() {
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
78 if (last == 0) error("front: empty list");
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
79 return ((SLNode<T>*)last->tl)->hd; }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
80 T& rear() {
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
81 if (last == 0) error("rear: empty list");
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
82 return ((SLNode<T>*)last)->hd; }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
83 const T& front() const {
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
84 if (last == 0) error("front: empty list");
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
85 return ((SLNode<T>*)last->tl)->hd; }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
86 const T& rear() const {
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
87 if (last == 0) error("rear: empty list");
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
88 return ((SLNode<T>*)last)->hd; }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
89 int remove_front(T& x) { return BaseSLList::remove_front(&x); }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
90 T remove_front() { T dst; BaseSLList::remove_front(&dst, 1); return dst; }
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
91 };
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
92
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
93 #endif
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
94
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
95 /*
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
96 ;;; Local Variables: ***
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
97 ;;; mode: C++ ***
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
98 ;;; End: ***
ed6532d8bf12 [project @ 1996-12-06 05:39:13 by jwe]
jwe
parents:
diff changeset
99 */