Go to the documentation of this file.00001
00002
00003
00004
00005 #include "ace/Malloc_Base.h"
00006 #include "ace/Min_Max.h"
00007 #include "ace/OS_NS_string.h"
00008 #include "ace/OS_Memory.h"
00009
00010 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00011
00012 template <class ACE_CHAR_T> ACE_INLINE void
00013 ACE_String_Base<ACE_CHAR_T>::dump (void) const
00014 {
00015 #if defined (ACE_HAS_DUMP)
00016 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::dump");
00017 #endif
00018 }
00019
00020
00021 template <class ACE_CHAR_T> ACE_INLINE ACE_String_Base<ACE_CHAR_T> &
00022 ACE_String_Base<ACE_CHAR_T>::assign_nocopy (const ACE_String_Base<ACE_CHAR_T> &s)
00023 {
00024 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::assign_nocopy");
00025 this->set (s.rep_, s.len_, false);
00026 return *this;
00027 }
00028
00029 template <class ACE_CHAR_T> ACE_INLINE typename ACE_String_Base<ACE_CHAR_T>::size_type
00030 ACE_String_Base<ACE_CHAR_T>::length (void) const
00031 {
00032 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::length");
00033 return this->len_;
00034 }
00035
00036 template <class ACE_CHAR_T> ACE_INLINE size_t
00037 ACE_String_Base<ACE_CHAR_T>::capacity (void) const
00038 {
00039 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::capacity");
00040 return this->buf_len_;
00041 }
00042
00043 template <class ACE_CHAR_T> ACE_INLINE bool
00044 ACE_String_Base<ACE_CHAR_T>::is_empty (void) const
00045 {
00046 return this->len_ == 0;
00047 }
00048
00049 template <class ACE_CHAR_T> ACE_INLINE bool
00050 ACE_String_Base<ACE_CHAR_T>::empty (void) const
00051 {
00052 return this->is_empty ();
00053 }
00054
00055 template <class ACE_CHAR_T> ACE_INLINE ACE_String_Base<ACE_CHAR_T>
00056 ACE_String_Base<ACE_CHAR_T>::substr (
00057 typename ACE_String_Base<ACE_CHAR_T>::size_type offset,
00058 typename ACE_String_Base<ACE_CHAR_T>::size_type length) const
00059 {
00060 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::substr");
00061 return this->substring (offset, length);
00062 }
00063
00064
00065
00066 template <class ACE_CHAR_T> ACE_INLINE const ACE_CHAR_T &
00067 ACE_String_Base<ACE_CHAR_T>::operator[] (
00068 typename ACE_String_Base<ACE_CHAR_T>::size_type slot) const
00069 {
00070 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::operator[]");
00071 return this->rep_[slot];
00072 }
00073
00074
00075
00076 template <class ACE_CHAR_T> ACE_INLINE ACE_CHAR_T &
00077 ACE_String_Base<ACE_CHAR_T>::operator[] (
00078 typename ACE_String_Base<ACE_CHAR_T>::size_type slot)
00079 {
00080 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::operator[]");
00081 return this->rep_[slot];
00082 }
00083
00084 template <class ACE_CHAR_T> ACE_INLINE const ACE_CHAR_T *
00085 ACE_String_Base<ACE_CHAR_T>::fast_rep (void) const
00086 {
00087 return this->rep_;
00088 }
00089
00090 template <class ACE_CHAR_T> ACE_INLINE const ACE_CHAR_T *
00091 ACE_String_Base<ACE_CHAR_T>::c_str (void) const
00092 {
00093 return this->rep_;
00094 }
00095
00096
00097
00098 template <class ACE_CHAR_T> ACE_INLINE bool
00099 ACE_String_Base<ACE_CHAR_T>::operator < (const ACE_String_Base<ACE_CHAR_T> &s) const
00100 {
00101 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::operator <");
00102 return compare (s) < 0;
00103 }
00104
00105
00106
00107 template <class ACE_CHAR_T> ACE_INLINE bool
00108 ACE_String_Base<ACE_CHAR_T>::operator > (const ACE_String_Base &s) const
00109 {
00110 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::operator >");
00111 return compare (s) > 0;
00112 }
00113
00114
00115
00116
00117 template <class ACE_CHAR_T> ACE_INLINE bool
00118 ACE_String_Base<ACE_CHAR_T>::operator!= (const ACE_String_Base<ACE_CHAR_T> &s) const
00119 {
00120 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::operator!=");
00121 return !(*this == s);
00122 }
00123
00124 template <class ACE_CHAR_T> ACE_INLINE bool
00125 ACE_String_Base<ACE_CHAR_T>::operator!= (const ACE_CHAR_T *s) const
00126 {
00127 return !(*this == s);
00128 }
00129
00130 template <class ACE_CHAR_T> ACE_INLINE typename ACE_String_Base<ACE_CHAR_T>::size_type
00131 ACE_String_Base<ACE_CHAR_T>::find (const ACE_String_Base<ACE_CHAR_T>&str,
00132 typename ACE_String_Base<ACE_CHAR_T>::size_type pos) const
00133 {
00134 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::find");
00135 return this->find (str.rep_, pos);
00136 }
00137
00138 template <class ACE_CHAR_T> ACE_INLINE typename ACE_String_Base<ACE_CHAR_T>::size_type
00139 ACE_String_Base<ACE_CHAR_T>::strstr (const ACE_String_Base<ACE_CHAR_T> &s) const
00140 {
00141 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::strstr");
00142 return this->find (s.rep_);
00143 }
00144
00145 template <class ACE_CHAR_T> ACE_INLINE typename ACE_String_Base<ACE_CHAR_T>::iterator
00146 ACE_String_Base<ACE_CHAR_T>::begin (void)
00147 {
00148 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::begin");
00149 return iterator (*this);
00150 }
00151
00152 template <class ACE_CHAR_T> ACE_INLINE typename ACE_String_Base<ACE_CHAR_T>::const_iterator
00153 ACE_String_Base<ACE_CHAR_T>::begin (void) const
00154 {
00155 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::begin");
00156 return const_iterator (*this);
00157 }
00158
00159 template <class ACE_CHAR_T> ACE_INLINE typename ACE_String_Base<ACE_CHAR_T>::iterator
00160 ACE_String_Base<ACE_CHAR_T>::end (void)
00161 {
00162 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::end");
00163 return iterator (*this, 1);
00164 }
00165
00166 template <class ACE_CHAR_T> ACE_INLINE typename ACE_String_Base<ACE_CHAR_T>::const_iterator
00167 ACE_String_Base<ACE_CHAR_T>::end (void) const
00168 {
00169 ACE_TRACE ("ACE_String_Base<ACE_CHAR_T>::end");
00170 return const_iterator (*this, 1);
00171 }
00172
00173
00174
00175 template <class ACE_CHAR_T> ACE_INLINE
00176 ACE_String_Base_Iterator <ACE_CHAR_T>::
00177 ACE_String_Base_Iterator (ACE_String_Base <ACE_CHAR_T> & str, int end)
00178 : str_ (&str),
00179 index_ (0 == end ? 0 : str.length ())
00180 {
00181 ACE_TRACE ("ACE_String_Base_Iterator<ACE_CHAR_T>::ACE_String_Base_Iterator");
00182 }
00183
00184 template <class ACE_CHAR_T> ACE_INLINE
00185 ACE_String_Base_Iterator <ACE_CHAR_T>::
00186 ACE_String_Base_Iterator (const ACE_String_Base_Iterator <ACE_CHAR_T> & iter)
00187 : str_ (iter.str_),
00188 index_ (iter.index_)
00189 {
00190 ACE_TRACE ("ACE_String_Base_Iterator<ACE_CHAR_T>::ACE_String_Base_Iterator");
00191 }
00192
00193 template <class ACE_CHAR_T> ACE_INLINE
00194 ACE_String_Base_Iterator <ACE_CHAR_T>::~ACE_String_Base_Iterator (void)
00195 {
00196 ACE_TRACE ("ACE_String_Base_Iterator<ACE_CHAR_T>::~ACE_String_Base_Iterator");
00197 }
00198
00199 template <class ACE_CHAR_T> ACE_INLINE
00200 int ACE_String_Base_Iterator <ACE_CHAR_T>::done (void) const
00201 {
00202 ACE_TRACE ("ACE_String_Base_Iterator<ACE_CHAR_T>::done");
00203
00204 return this->index_ >= this->str_->length () ? 1 : 0;
00205 }
00206
00207 template <class ACE_CHAR_T> ACE_INLINE
00208 ACE_CHAR_T & ACE_String_Base_Iterator <ACE_CHAR_T>::operator * (void)
00209 {
00210 ACE_TRACE ("ACE_String_Base_Iterator<ACE_CHAR_T>::operator *");
00211
00212 return this->str_->rep_[this->index_];
00213 }
00214
00215 template <class ACE_CHAR_T> ACE_INLINE
00216 ACE_String_Base_Iterator <ACE_CHAR_T> &
00217 ACE_String_Base_Iterator <ACE_CHAR_T>::operator ++ (void)
00218 {
00219 ACE_TRACE ("ACE_String_Base_Iterator<ACE_CHAR_T>::operator ++");
00220
00221 if (0 == this->done ())
00222 ++ this->index_;
00223
00224 return *this;
00225 }
00226
00227 template <class ACE_CHAR_T> ACE_INLINE
00228 ACE_String_Base_Iterator <ACE_CHAR_T>
00229 ACE_String_Base_Iterator <ACE_CHAR_T>::operator ++ (int)
00230 {
00231 ACE_TRACE ("ACE_String_Base_Iterator<ACE_CHAR_T>::operator ++ (int)");
00232
00233 ACE_String_Base_Iterator <ACE_CHAR_T> temp (*this);
00234
00235 if (0 == this->done ())
00236 ++ this->index_;
00237
00238 return temp;
00239 }
00240
00241 template <class ACE_CHAR_T> ACE_INLINE
00242 ACE_String_Base_Iterator <ACE_CHAR_T> &
00243 ACE_String_Base_Iterator <ACE_CHAR_T>::operator -- (void)
00244 {
00245 ACE_TRACE ("ACE_String_Base_Iterator<ACE_CHAR_T>::operator --");
00246
00247 if (0 < this->index_)
00248 -- this->index_;
00249
00250 return *this;
00251 }
00252
00253 template <class ACE_CHAR_T> ACE_INLINE
00254 ACE_String_Base_Iterator <ACE_CHAR_T>
00255 ACE_String_Base_Iterator <ACE_CHAR_T>::operator -- (int)
00256 {
00257 ACE_TRACE ("ACE_String_Base_Iterator<ACE_CHAR_T>::operator -- (int)");
00258
00259 ACE_String_Base_Iterator <ACE_CHAR_T> temp (*this);
00260
00261 if (0 < this->index_)
00262 -- this->index_;
00263
00264 return temp;
00265 }
00266
00267 template <class ACE_CHAR_T> ACE_INLINE bool
00268 ACE_String_Base_Iterator <ACE_CHAR_T>::
00269 operator == (const ACE_String_Base_Iterator <ACE_CHAR_T> & rhs) const
00270 {
00271 return this->index_ == rhs.index_;
00272 }
00273
00274 template <class ACE_CHAR_T> ACE_INLINE bool
00275 ACE_String_Base_Iterator <ACE_CHAR_T>::
00276 operator != (const ACE_String_Base_Iterator <ACE_CHAR_T> & rhs) const
00277 {
00278 return this->index_ != rhs.index_;
00279 }
00280
00281 template <class ACE_CHAR_T> ACE_INLINE bool
00282 ACE_String_Base_Iterator <ACE_CHAR_T>::
00283 operator < (const ACE_String_Base_Iterator <ACE_CHAR_T> & rhs) const
00284 {
00285 return this->index_ < rhs.index_;
00286 }
00287
00288 template <class ACE_CHAR_T> ACE_INLINE bool
00289 ACE_String_Base_Iterator <ACE_CHAR_T>::
00290 operator > (const ACE_String_Base_Iterator <ACE_CHAR_T> & rhs) const
00291 {
00292 return this->index_ > rhs.index_;
00293 }
00294
00295 template <class ACE_CHAR_T> ACE_INLINE bool
00296 ACE_String_Base_Iterator <ACE_CHAR_T>::
00297 operator >= (const ACE_String_Base_Iterator <ACE_CHAR_T> & rhs) const
00298 {
00299 return this->index_ >= rhs.index_;
00300 }
00301
00302 template <class ACE_CHAR_T> ACE_INLINE bool
00303 ACE_String_Base_Iterator <ACE_CHAR_T>::
00304 operator <= (const ACE_String_Base_Iterator <ACE_CHAR_T> & rhs) const
00305 {
00306 return this->index_ <= rhs.index_;
00307 }
00308
00309
00310
00311 template <class ACE_CHAR_T> ACE_INLINE
00312 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::
00313 ACE_String_Base_Const_Iterator (const ACE_String_Base <ACE_CHAR_T> & str, int end)
00314 : str_ (&str),
00315 index_ (0 == end ? 0 : str.length ())
00316 {
00317 ACE_TRACE ("ACE_String_Base_Const_Iterator<ACE_CHAR_T>::ACE_String_Base_Const_Iterator");
00318 }
00319
00320 template <class ACE_CHAR_T> ACE_INLINE
00321 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::
00322 ACE_String_Base_Const_Iterator (const ACE_String_Base_Const_Iterator <ACE_CHAR_T> & iter)
00323 : str_ (iter.str_),
00324 index_ (iter.index_)
00325 {
00326 ACE_TRACE ("ACE_String_Base_Const_Iterator<ACE_CHAR_T>::ACE_String_Base_Const_Iterator");
00327 }
00328
00329 template <class ACE_CHAR_T> ACE_INLINE
00330 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::~ACE_String_Base_Const_Iterator (void)
00331 {
00332 ACE_TRACE ("ACE_String_Base_Const_Iterator<ACE_CHAR_T>::~ACE_String_Base_Const_Iterator");
00333 }
00334
00335 template <class ACE_CHAR_T> ACE_INLINE
00336 int ACE_String_Base_Const_Iterator <ACE_CHAR_T>::done (void) const
00337 {
00338 ACE_TRACE ("ACE_String_Base_Const_Iterator<ACE_CHAR_T>::done");
00339
00340 return this->index_ >= this->str_->length () ? 1 : 0;
00341 }
00342
00343 template <class ACE_CHAR_T> ACE_INLINE
00344 const ACE_CHAR_T & ACE_String_Base_Const_Iterator <ACE_CHAR_T>::operator * (void)
00345 {
00346 ACE_TRACE ("ACE_String_Base_Const_Iterator<ACE_CHAR_T>::operator *");
00347
00348 return this->str_->rep_[this->index_];
00349 }
00350
00351 template <class ACE_CHAR_T> ACE_INLINE
00352 ACE_String_Base_Const_Iterator <ACE_CHAR_T> &
00353 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::operator ++ (void)
00354 {
00355 ACE_TRACE ("ACE_String_Base_Const_Iterator<ACE_CHAR_T>::operator ++");
00356
00357 if (0 == this->done ())
00358 ++ this->index_;
00359
00360 return *this;
00361 }
00362
00363 template <class ACE_CHAR_T> ACE_INLINE
00364 ACE_String_Base_Const_Iterator <ACE_CHAR_T>
00365 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::operator ++ (int)
00366 {
00367 ACE_TRACE ("ACE_String_Base_Const_Iterator<ACE_CHAR_T>::operator ++ (int)");
00368
00369 ACE_String_Base_Const_Iterator <ACE_CHAR_T> temp (*this);
00370
00371 if (0 == this->done ())
00372 ++ this->index_;
00373
00374 return temp;
00375 }
00376
00377 template <class ACE_CHAR_T> ACE_INLINE
00378 ACE_String_Base_Const_Iterator <ACE_CHAR_T> &
00379 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::operator -- (void)
00380 {
00381 ACE_TRACE ("ACE_String_Base_Const_Iterator<ACE_CHAR_T>::operator --");
00382
00383 if (0 < this->index_)
00384 -- this->index_;
00385
00386 return *this;
00387 }
00388
00389 template <class ACE_CHAR_T> ACE_INLINE
00390 ACE_String_Base_Const_Iterator <ACE_CHAR_T>
00391 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::operator -- (int)
00392 {
00393 ACE_TRACE ("ACE_String_Base_Const_Iterator<ACE_CHAR_T>::operator -- (int)");
00394
00395 ACE_String_Base_Const_Iterator <ACE_CHAR_T> temp (*this);
00396
00397 if (0 < this->index_)
00398 -- this->index_;
00399
00400 return temp;
00401 }
00402
00403 template <class ACE_CHAR_T> ACE_INLINE bool
00404 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::
00405 operator == (const ACE_String_Base_Const_Iterator <ACE_CHAR_T> & rhs) const
00406 {
00407 return this->index_ == rhs.index_;
00408 }
00409
00410 template <class ACE_CHAR_T> ACE_INLINE bool
00411 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::
00412 operator != (const ACE_String_Base_Const_Iterator <ACE_CHAR_T> & rhs) const
00413 {
00414 return this->index_ != rhs.index_;
00415 }
00416
00417 template <class ACE_CHAR_T> ACE_INLINE bool
00418 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::
00419 operator < (const ACE_String_Base_Const_Iterator <ACE_CHAR_T> & rhs) const
00420 {
00421 return this->index_ < rhs.index_;
00422 }
00423
00424 template <class ACE_CHAR_T> ACE_INLINE bool
00425 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::
00426 operator > (const ACE_String_Base_Const_Iterator <ACE_CHAR_T> & rhs) const
00427 {
00428 return this->index_ > rhs.index_;
00429 }
00430
00431 template <class ACE_CHAR_T> ACE_INLINE bool
00432 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::
00433 operator >= (const ACE_String_Base_Const_Iterator <ACE_CHAR_T> & rhs) const
00434 {
00435 return this->index_ >= rhs.index_;
00436 }
00437
00438 template <class ACE_CHAR_T> ACE_INLINE bool
00439 ACE_String_Base_Const_Iterator <ACE_CHAR_T>::
00440 operator <= (const ACE_String_Base_Const_Iterator <ACE_CHAR_T> & rhs) const
00441 {
00442 return this->index_ <= rhs.index_;
00443 }
00444
00445
00446
00447 template <class ACE_CHAR_T> ACE_INLINE bool
00448 operator== (const ACE_CHAR_T *s,
00449 const ACE_String_Base<ACE_CHAR_T> &t)
00450 {
00451 return t == s;
00452 }
00453
00454 template <class ACE_CHAR_T> ACE_INLINE bool
00455 operator!= (const ACE_CHAR_T *s,
00456 const ACE_String_Base<ACE_CHAR_T> &t)
00457 {
00458 return !(t == s);
00459 }
00460
00461 ACE_END_VERSIONED_NAMESPACE_DECL