Go to the documentation of this file.00001
00002
00003
00004
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 #ifndef UILList_H
00037 #define UILList_H
00038
00039 #include <OpenFOAM/label.H>
00040 #include <OpenFOAM/uLabel.H>
00041
00042
00043
00044 namespace Foam
00045 {
00046
00047 class Ostream;
00048
00049
00050
00051 template<class LListBase, class T>
00052 class UILList;
00053
00054 template<class LListBase, class T>
00055 Ostream& operator<<
00056 (
00057 Ostream&,
00058 const UILList<LListBase, T>&
00059 );
00060
00061
00062
00063
00064
00065
00066 template<class LListBase, class T>
00067 class UILList
00068 :
00069 public LListBase
00070 {
00071
00072 public:
00073
00074
00075
00076 class iterator;
00077 friend class iterator;
00078
00079 class const_iterator;
00080 friend class const_iterator;
00081
00082
00083
00084
00085
00086 UILList()
00087 {}
00088
00089
00090 UILList(T* a)
00091 :
00092 LListBase(a)
00093 {}
00094
00095
00096 UILList(const UILList<LListBase, T>&);
00097
00098
00099
00100
00101
00102
00103
00104 T* first()
00105 {
00106 return static_cast<T*>(LListBase::first());
00107 }
00108
00109
00110 const T* first() const
00111 {
00112 return static_cast<const T*>(LListBase::first());
00113 }
00114
00115
00116 T* last()
00117 {
00118 return static_cast<T*>(LListBase::last());
00119 }
00120
00121
00122 const T* last() const
00123 {
00124 return static_cast<const T*>(LListBase::last());
00125 }
00126
00127
00128
00129
00130
00131 T* removeHead()
00132 {
00133 return static_cast<T*>(LListBase::removeHead());
00134 }
00135
00136
00137 T* remove(T* p)
00138 {
00139 return static_cast<T*>(LListBase::remove(p));
00140 }
00141
00142
00143 T* remove(iterator& it)
00144 {
00145 return static_cast<T*>(LListBase::remove(it));
00146 }
00147
00148
00149
00150
00151 void operator=(const UILList<LListBase, T>&);
00152
00153
00154
00155
00156
00157 typedef T value_type;
00158
00159
00160
00161 typedef T& reference;
00162
00163
00164
00165 typedef const T& const_reference;
00166
00167
00168 typedef label size_type;
00169
00170
00171
00172
00173 typedef typename LListBase::iterator LListBase_iterator;
00174
00175
00176 class iterator
00177 :
00178 public LListBase_iterator
00179 {
00180
00181 public:
00182
00183
00184 iterator
00185 (
00186 LListBase_iterator baseIter
00187 )
00188 :
00189 LListBase_iterator(baseIter)
00190 {}
00191
00192
00193
00194
00195 T& operator*()
00196 {
00197 return static_cast<T&>(LListBase_iterator::operator*());
00198 }
00199
00200 T& operator()()
00201 {
00202 return operator*();
00203 }
00204
00205 iterator& operator++()
00206 {
00207 LListBase_iterator::operator++();
00208 return *this;
00209 }
00210 };
00211
00212
00213
00214
00215 typedef typename LListBase::const_iterator LListBase_const_iterator;
00216
00217
00218 class const_iterator
00219 :
00220 public LListBase_const_iterator
00221 {
00222
00223 public:
00224
00225
00226 const_iterator
00227 (
00228 LListBase_const_iterator baseIter
00229 )
00230 :
00231 LListBase_const_iterator(baseIter)
00232 {}
00233
00234
00235 const_iterator
00236 (
00237 LListBase_iterator baseIter
00238 )
00239 :
00240 LListBase_const_iterator(baseIter)
00241 {}
00242
00243
00244
00245
00246 const T& operator*()
00247 {
00248 return
00249 static_cast<const T&>
00250 (LListBase_const_iterator::operator*());
00251 }
00252
00253 const T& operator()()
00254 {
00255 return operator*();
00256 }
00257
00258 const_iterator& operator++()
00259 {
00260 LListBase_const_iterator::operator++();
00261 return *this;
00262 }
00263 };
00264
00265
00266
00267
00268
00269
00270
00271 bool operator==(const UILList<LListBase, T>&) const;
00272
00273
00274 bool operator!=(const UILList<LListBase, T>&) const;
00275
00276
00277
00278
00279 friend Ostream& operator<< <LListBase, T>
00280 (
00281 Ostream&,
00282 const UILList<LListBase, T>&
00283 );
00284 };
00285
00286
00287
00288
00289 }
00290
00291
00292
00293 #ifdef NoRepository
00294 # include "UILList.C"
00295 #endif
00296
00297
00298
00299 #endif
00300
00301