1 : //=============================================================================
2 : // File <$/src/cpp/prod/tool/SList.h>
3 : // This file is part of YaOrb : Yet Another Object Request Broker,
4 : // Copyright (c) 2000-2003, Marc Alff.
5 : //
6 : // This program is free software; you can redistribute it and/or
7 : // modify it under the terms of the GNU General Public License
8 : // as published by the Free Software Foundation; either version 2
9 : // of the License, or (at your option) any later version.
10 : //
11 : // This program is distributed in the hope that it will be useful,
12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : // GNU General Public License for more details.
15 : //
16 : // You should have received a copy of the GNU General Public License
17 : // along with this program; if not, write to the Free Software
18 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 : //
20 : //=============================================================================
21 :
22 : #ifndef SLIST_H
23 : #define SLIST_H
24 :
25 : class SListIterator ;
26 :
27 : class SListItem
28 : {
29 : friend class SList ;
30 : friend class SListIterator ;
31 :
32 : private :
33 : SListItem() ;
34 : SListItem(void *anObj) ;
35 : ~SListItem() ;
36 :
37 : private : // Denied
38 : SListItem(const SListItem&) ;
39 : SListItem& operator=(const SListItem&) ;
40 :
41 : private :
42 : SListItem *_next ;
43 : void *_item ;
44 :
45 : } ;
46 :
47 : class SList
48 : {
49 : friend class SListIterator ;
50 :
51 : public :
52 : SList() ;
53 : SList(void *anObj) ;
54 : ~SList() ;
55 :
56 : int size() const ;
57 : bool isEmpty() const ;
58 :
59 : void addHead(void *anObj) ;
60 : void addTail(void *anObj) ;
61 :
62 : void appendAndClear(SList& aList) ;
63 :
64 : void *head() const ;
65 : void *tail() const ;
66 :
67 : void *removeHead() ;
68 : void *removeTail() ;
69 :
70 : void removeObject(void *anObj) ;
71 :
72 : void clear() ;
73 :
74 : SList& operator=(const SList&) ;
75 :
76 : private : // Denied
77 : SList(const SList&) ;
78 :
79 : private :
80 : SListItem *_head ;
81 : SListItem *_tail ;
82 : int _size ;
83 : } ;
84 :
85 : class SListIterator
86 : {
87 : public :
88 : SListIterator (const SList& aList) ;
89 : virtual ~SListIterator () ;
90 :
91 : bool GetNext() ;
92 : void *GetItem(void) const ;
93 :
94 : private :
95 : const SListItem *_cursor ;
96 : const SListItem *_process ;
97 :
98 : private : // Denied
99 : SListIterator() ;
100 : SListIterator(const SListIterator& ) ;
101 : SListIterator & operator=(const SListIterator& ) ;
102 : } ;
103 :
104 : template <class T> class TSListIterator ;
105 :
106 : template <class T>
107 : class TSList
108 : {
109 : friend class TSListIterator<T> ;
110 :
111 : private :
112 : SList L ;
113 :
114 : public :
115 18238 : TSList () : L()
116 : {}
117 :
118 4865 : TSList (T *anObj) : L(anObj)
119 : {}
120 :
121 : ~TSList ()
122 4429 : {}
123 :
124 : int size() const
125 13621 : { return L.size() ; }
126 :
127 : bool isEmpty() const
128 3 : { return L.isEmpty() ; }
129 :
130 : void addHead(T *anObj)
131 : { L.addHead(anObj) ; }
132 :
133 : void addTail(T *anObj)
134 41106 : { L.addTail(anObj) ; }
135 :
136 : void appendAndClear(TSList<T>& aList)
137 : { L.appendAndClear(aList.L) ; }
138 :
139 : T *head() const
140 9356 : { return (T*) L.head() ; }
141 :
142 : T *tail() const
143 : { return (T*) L.tail() ; }
144 :
145 : T* removeHead()
146 1498 : { return (T*) L.removeHead() ; }
147 :
148 : T* removeTail()
149 : { return (T*) L.removeTail() ; }
150 :
151 : void removeObject(T *anObj)
152 476 : { L.removeObject(anObj) ; }
153 :
154 : void clear()
155 22453 : { L.clear() ; }
156 :
157 : void clearAndDestroy()
158 : {
159 : TSListIterator<T> I(*this) ;
160 41162 : while (I.GetNext())
161 : {
162 24909 : delete I.GetItem() ;
163 : }
164 : clear() ;
165 : }
166 :
167 : TSList& operator=(const TSList<T>& L2)
168 : {
169 63 : L = L2.L ;
170 : return *this ;
171 : }
172 :
173 : private : // Denied
174 : TSList(const TSList<T>&) ;
175 :
176 : } ;
177 :
178 : template <class T>
179 : class TSListIterator
180 : {
181 : private :
182 : SListIterator I ;
183 :
184 : public :
185 63281 : TSListIterator (const TSList<T> & L) : I(L.L)
186 : {}
187 :
188 : ~TSListIterator ()
189 20718 : {}
190 :
191 : bool GetNext()
192 801622 : { return I.GetNext() ; }
193 :
194 : T *GetItem()
195 749231 : { return (T*) I.GetItem() ; }
196 :
197 : private : // Denied
198 : TSListIterator () ;
199 : TSListIterator (const TSListIterator<T> & ) ;
200 : TSListIterator & operator=(const TSListIterator<T> & ) ;
201 : } ;
202 :
203 : #endif
204 :
|