RefList.hGo to the documentation of this file.00001
00002
00003 #ifndef _REF_LIST_H
00004 #define _REF_LIST_H
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094 #include <stream.h>
00095
00096 #include "BaseRefList.h"
00097 #include "TypedCollection.h"
00098
00099 template <class T> class RefList : public TypedCollection<T> {
00100 friend class Iterator <T>;
00101 friend class Mutator <T>;
00102
00103
00104
00105 friend ostream & operator << <> (ostream & o, const RefList<T> &l);
00106
00107 protected:
00108 BaseRefList _list;
00109 virtual INLINE const Collection & _base_collection() const;
00110 virtual INLINE Collection & _base_collection();
00111
00112 public:
00113 INLINE RefList();
00114 INLINE RefList(const RefList<T >&l);
00115 virtual INLINE ~RefList();
00116
00117 INLINE int entries() const;
00118
00119 INLINE const T &operator[] (int sub) const;
00120 INLINE T &operator[] (int sub);
00121
00122
00123
00124
00125
00126 INLINE void print(ostream & out, char *sep) const;
00127
00128
00129 INLINE void modify(int loc, T &el);
00130
00131
00132 INLINE void ins(const T &new_element, int loc);
00133
00134
00135 INLINE T & grab();
00136
00137
00138 INLINE T & grab(T &el);
00139
00140
00141 INLINE T & grab(int loc);
00142
00143
00144 INLINE void del(T &el);
00145
00146
00147
00148 INLINE void del(T &el, int loc);
00149
00150
00151
00152 INLINE void del(int loc);
00153
00154
00155
00156 INLINE Boolean member(const T &el) const;
00157
00158
00159
00160 INLINE int index(const T &el) const;
00161
00162
00163
00164 INLINE Boolean valid(int loc) const;
00165
00166
00167 INLINE Boolean valid(const T &el) const;
00168
00169
00170 INLINE void ins_first(const T &new_element);
00171
00172
00173 INLINE void ins_last(const T &new_element);
00174
00175
00176 INLINE void ins_before(const T &new_element, const T &ref);
00177
00178
00179
00180
00181
00182 INLINE void ins_after(const T &new_element, const T &ref);
00183
00184
00185
00186
00187
00188 INLINE void clear();
00189
00190
00191 INLINE RefList<T >&operator = (const RefList<T >&l);
00192
00193
00194 INLINE int structures_OK() const;
00195
00196
00197
00198
00199 INLINE Listable *listable_clone() const;
00200
00201
00202 INLINE void print(ostream &o) const;
00203
00204 };
00205
00206
00207
00208
00209
00210 template <class T>
00211 INLINE
00212 RefList<T>::RefList()
00213 {
00214
00215 }
00216
00217 template <class T>
00218 INLINE
00219 RefList<T>::RefList(const RefList<T >&l)
00220 {
00221 _list = l._list;
00222 }
00223
00224 template <class T>
00225 INLINE
00226 RefList<T>::~RefList()
00227 {
00228
00229 }
00230
00231 template <class T>
00232 INLINE int
00233 RefList<T>::entries() const
00234 {
00235 return _list.entries();
00236 }
00237
00238 template <class T>
00239 INLINE const T &
00240 RefList<T>::operator[] (int sub) const
00241 {
00242 return (const T &) _list[sub];
00243 }
00244
00245 template <class T>
00246 INLINE T &
00247 RefList<T>::operator[] (int sub)
00248 {
00249 return (T &) _list[sub];
00250 }
00251
00252 template <class T>
00253 INLINE void
00254 RefList<T>::print(ostream & out, char *sep) const
00255 {
00256 _list.print(out, sep);
00257 }
00258
00259 template <class T>
00260 INLINE void
00261 RefList<T>::modify(int loc, T &el)
00262 {
00263 _list.modify( loc, el );
00264 }
00265
00266 template <class T>
00267 INLINE void
00268 RefList<T>::ins(const T &new_element, int loc)
00269 {
00270 _list.ins( new_element, loc );
00271 }
00272
00273 template <class T>
00274 INLINE void
00275 RefList<T>::del(int loc)
00276 {
00277 _list.del(loc);
00278 }
00279
00280 template <class T>
00281 INLINE void
00282 RefList<T>::del(T &el, int loc)
00283 {
00284 _list.del( el, loc );
00285 }
00286
00287 template <class T>
00288 INLINE void
00289 RefList<T>::del(T &el)
00290 {
00291 _list.del( el, 0 );
00292 }
00293
00294 template <class T>
00295 INLINE T &
00296 RefList<T>::grab()
00297 {
00298 return grab(0);
00299 }
00300
00301 template <class T>
00302 INLINE T &
00303 RefList<T>::grab(int loc)
00304 {
00305 T &el = (*this)[loc];
00306 this->del(loc);
00307 return el;
00308 }
00309
00310 template <class T>
00311 INLINE T &
00312 RefList<T>::grab(T &el)
00313 {
00314 this->del(el,0);
00315 return el;
00316 }
00317
00318 template <class T>
00319 INLINE int
00320 RefList<T>::index(const T &el) const
00321 {
00322 return _list.index( el );
00323 }
00324
00325 template <class T>
00326 INLINE Boolean
00327 RefList<T>::member(const T &el) const
00328 {
00329 return _list.member( el );
00330 }
00331
00332 template <class T>
00333 INLINE Boolean
00334 RefList<T>::valid(int loc) const
00335 {
00336 return _list.valid(loc);
00337 }
00338
00339 template <class T>
00340 INLINE Boolean
00341 RefList<T>::valid(const T &el) const
00342 {
00343 return _list.valid( el );
00344 }
00345
00346 template <class T>
00347 INLINE void
00348 RefList<T>::ins_first(const T &new_element)
00349 {
00350 _list.ins( new_element, 0 );
00351 }
00352
00353 template <class T>
00354 INLINE void
00355 RefList<T>::ins_last(const T &new_element)
00356 {
00357 _list.ins( new_element, _list.entries() );
00358 }
00359
00360 template <class T>
00361 INLINE void
00362 RefList<T>::ins_before(const T &new_element, const T &ref)
00363 {
00364 _list.ins_before( new_element, ref );
00365 }
00366
00367 template <class T>
00368 INLINE void
00369 RefList<T>::ins_after(const T &new_element, const T &ref)
00370 {
00371 _list.ins_after( new_element, ref );
00372 }
00373
00374 template <class T>
00375 INLINE void
00376 RefList<T>::clear()
00377 {
00378 _list.clear();
00379 }
00380
00381
00382 template <class T>
00383 INLINE RefList<T> &
00384 RefList<T>::operator = (const RefList<T >&l)
00385 {
00386 _list = l._list;
00387 return *this;
00388 }
00389
00390 template <class T>
00391 INLINE int
00392 RefList<T>::structures_OK() const
00393 {
00394 return _list.structures_OK();
00395 }
00396
00397 template <class T>
00398 INLINE const Collection &
00399 RefList<T>::_base_collection() const
00400 {
00401 return _list;
00402 }
00403
00404 template <class T>
00405 INLINE Collection &
00406 RefList<T>::_base_collection()
00407 {
00408 return _list;
00409 }
00410
00411 template <class T>
00412 INLINE Listable *
00413 RefList<T>::listable_clone() const
00414 {
00415 return (Listable *) new RefList<T>(*this);
00416 }
00417
00418 template <class T>
00419 INLINE void
00420 RefList<T>::print(ostream &o) const
00421 {
00422 print(o, ", ");
00423 }
00424
00425
00426
00427
00428
00429
00430 template <class T>
00431 ostream &
00432 operator << (ostream & o, const RefList<T> &l)
00433 {
00434 l.print(o, ", ");
00435 return o;
00436 }
00437
00438 #endif
|