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