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 #ifndef lestes__std___srp_bodies_hh___included
00029 #define lestes__std___srp_bodies_hh___included
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include <lestes/std/srp.hh>
00039
00040 package(lestes);
00041 package(std);
00042
00043
00044
00045
00046
00047
00048 template <typename T>
00049 inline srp<T>::srp(T *a_pointer):
00050 simple_pointer()
00051 {
00052 pointer_set(a_pointer);
00053 }
00054
00055
00056
00057
00058
00059
00060
00061 template <typename T>
00062 template <typename U>
00063 inline srp<T>::srp(U *a_pointer):
00064 simple_pointer()
00065 {
00066 pointer_set(a_pointer);
00067 }
00068
00069
00070
00071
00072
00073 template <typename T>
00074 inline srp<T>::srp(void):
00075 simple_pointer()
00076 {
00077 pointer_set(NULL);
00078 }
00079
00080
00081
00082
00083
00084
00085
00086 template <typename T>
00087 inline srp<T>::srp(const srp<T> &other):
00088 simple_pointer()
00089 {
00090 pointer_set(other.pointer_get());
00091 }
00092
00093
00094
00095
00096
00097
00098
00099 template <typename T>
00100 template <typename U>
00101 inline srp<T>::srp(const srp<U> &other):
00102 simple_pointer()
00103 {
00104 pointer_set(other.pointer_get());
00105 }
00106
00107
00108
00109
00110
00111
00112
00113 template <typename T>
00114 template <typename U>
00115 inline srp<T>::srp(const ptr<U> &other):
00116 simple_pointer()
00117 {
00118 pointer_set(other.pointer_get());
00119 }
00120
00121
00122
00123
00124 template <typename T>
00125 inline srp<T>::~srp(void)
00126 {
00127 }
00128
00129
00130
00131
00132
00133 template <typename T>
00134 inline T *srp<T>::operator->(void) const
00135 {
00136 T * result = pointer_get();
00137 lassert2( result, "Dereferencing NULL pointer." );
00138 return result;
00139 }
00140
00141
00142
00143
00144
00145 template <typename T>
00146 inline T &srp<T>::operator *(void) const
00147 {
00148 T * presult = pointer_get();
00149 lassert2( presult, "Dereferencing NULL pointer." );
00150 return *presult;
00151 }
00152
00153
00154
00155
00156
00157
00158 template <typename T>
00159 inline srp<T> &srp<T>::operator=(T *a_pointer)
00160 {
00161 pointer_set(a_pointer);
00162 return *this;
00163 }
00164
00165
00166
00167
00168
00169
00170
00171 template <typename T>
00172 template <typename U>
00173 inline srp<T> &srp<T>::operator=(U *a_pointer)
00174 {
00175 pointer_set(a_pointer);
00176 return *this;
00177 }
00178
00179
00180
00181
00182
00183
00184
00185 template <typename T>
00186 inline srp<T> &srp<T>::operator=(const srp<T> &other)
00187 {
00188 pointer_set(other.pointer_get());
00189 return *this;
00190 }
00191
00192
00193
00194
00195
00196
00197
00198 template <typename T>
00199 template <typename U>
00200 inline srp<T> &srp<T>::operator=(const srp<U> &other)
00201 {
00202 pointer_set(other.pointer_get());
00203 return *this;
00204 }
00205
00206
00207
00208
00209
00210
00211
00212 template <typename T>
00213 template <typename U>
00214 inline srp<T> &srp<T>::operator=(const ptr<U> &other)
00215 {
00216 pointer_set(other.pointer_get());
00217 return *this;
00218 }
00219
00220 #ifdef LESTES_OLD_POINTER_CONDITION
00221
00222
00223
00224
00225 template <typename T>
00226 inline srp<T>::operator bool(void) const
00227 {
00228 return pointer_get();
00229 }
00230 #else
00231
00232
00233
00234
00235 template <typename T>
00236 inline srp<T>::operator condition*(void) const
00237 {
00238 static condition c;
00239 return pointer_get() ? &c : NULL;
00240 }
00241 #endif
00242
00243
00244
00245
00246
00247 template <typename T>
00248 inline bool srp<T>::operator!(void) const
00249 {
00250 return !pointer_get();
00251 }
00252
00253
00254
00255
00256
00257 template <typename T>
00258 inline bool srp<T>::operator==(T *a_pointer) const
00259 {
00260 return pointer_get() == a_pointer;
00261 }
00262
00263
00264
00265
00266
00267
00268 template <typename T>
00269 template <typename U>
00270 inline bool srp<T>::operator==(U *a_pointer) const
00271 {
00272 return pointer_get() == a_pointer;
00273 }
00274
00275
00276
00277
00278
00279 template <typename T>
00280 inline bool srp<T>::operator==(::std::ptrdiff_t a_pointer) const
00281 {
00282 #ifdef LESTES_STRICT_CHECKING
00283
00284 lassert(!a_pointer);
00285 #endif
00286 return !pointer_get();
00287 }
00288
00289
00290
00291
00292
00293
00294 template <typename T>
00295 template <typename U>
00296 inline bool srp<T>::operator==(const srp<U> &other) const
00297 {
00298 return pointer_get() == other.pointer_get();
00299 }
00300
00301
00302
00303
00304
00305
00306 template <typename T>
00307 template <typename U>
00308 inline bool srp<T>::operator==(const ptr<U> &other) const
00309 {
00310 return pointer_get() == other.pointer_get();
00311 }
00312
00313
00314
00315
00316
00317 template <typename T>
00318 inline bool srp<T>::operator!=(T *a_pointer) const
00319 {
00320 return pointer_get() != a_pointer;
00321 }
00322
00323
00324
00325
00326
00327
00328 template <typename T>
00329 template <typename U>
00330 inline bool srp<T>::operator!=(U *a_pointer) const
00331 {
00332 return pointer_get() != a_pointer;
00333 }
00334
00335
00336
00337
00338
00339 template <typename T>
00340 inline bool srp<T>::operator!=(::std::ptrdiff_t a_pointer) const
00341 {
00342 #ifdef LESTES_STRICT_CHECKING
00343
00344 lassert(!a_pointer);
00345 #endif
00346 return pointer_get();
00347 }
00348
00349
00350
00351
00352
00353
00354 template <typename T>
00355 template <typename U>
00356 inline bool srp<T>::operator!=(const srp<U> &other) const
00357 {
00358 return pointer_get() != other.pointer_get();
00359 }
00360
00361
00362
00363
00364
00365
00366 template <typename T>
00367 template <typename U>
00368 inline bool srp<T>::operator!=(const ptr<U> &other) const
00369 {
00370 return pointer_get() != other.pointer_get();
00371 }
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382 template <typename T>
00383 template <typename U>
00384 inline ptr<U> srp<T>::dncast(void) const
00385 {
00386 register T * source = pointer_get();
00387 register U * result = dynamic_cast<U *>(source);
00388
00389 lassert2( !source || result, "Dncasting to wrong type." );
00390 return ptr<U>(result);
00391 }
00392
00393
00394
00395
00396
00397 template <typename T>
00398 inline T *srp<T>::pointer_get(void) const
00399 {
00400 return static_cast<T *>(simple_pointer::pointer_get());
00401 }
00402
00403
00404
00405
00406
00407 template <typename T>
00408 inline bool srp<T>::operator < (const srp<T> &b) const
00409 {
00410 return pointer_get() < b.pointer_get();
00411 }
00412
00413
00414
00415
00416
00417 template <typename T>
00418 inline void srp<T>::pointer_set(T *a_pointer)
00419 {
00420 simple_pointer::pointer_set(a_pointer);
00421 }
00422
00423 end_package(std);
00424 end_package(lestes);
00425
00426 #endif
00427