// -*- C++ -*- #include "ace/Malloc_Base.h" #include "ace/Min_Max.h" #include "ace/OS_NS_string.h" #include "ace/OS_Memory.h" ACE_BEGIN_VERSIONED_NAMESPACE_DECL template ACE_INLINE void ACE_String_Base::dump () const { #if defined (ACE_HAS_DUMP) ACE_TRACE ("ACE_String_Base::dump"); #endif /* ACE_HAS_DUMP */ } // Assignment method (does not copy memory) template ACE_INLINE ACE_String_Base & ACE_String_Base::assign_nocopy (const ACE_String_Base &s) { ACE_TRACE ("ACE_String_Base::assign_nocopy"); this->set (s.rep_, s.len_, false); return *this; } template ACE_INLINE typename ACE_String_Base::size_type ACE_String_Base::length () const { ACE_TRACE ("ACE_String_Base::length"); return this->len_; } template ACE_INLINE size_t ACE_String_Base::capacity () const { ACE_TRACE ("ACE_String_Base::capacity"); return this->buf_len_; } template ACE_INLINE bool ACE_String_Base::is_empty () const { return this->len_ == 0; } template ACE_INLINE bool ACE_String_Base::empty () const { return this->is_empty (); } template ACE_INLINE ACE_String_Base ACE_String_Base::substr ( typename ACE_String_Base::size_type offset, typename ACE_String_Base::size_type length) const { ACE_TRACE ("ACE_String_Base::substr"); return this->substring (offset, length); } // Return the character in the string. template ACE_INLINE const ACE_CHAR_T & ACE_String_Base::operator[] ( typename ACE_String_Base::size_type slot) const { ACE_TRACE ("ACE_String_Base::operator[]"); return this->rep_[slot]; } // Return the character in the string by reference. template ACE_INLINE ACE_CHAR_T & ACE_String_Base::operator[] ( typename ACE_String_Base::size_type slot) { ACE_TRACE ("ACE_String_Base::operator[]"); return this->rep_[slot]; } template ACE_INLINE const ACE_CHAR_T * ACE_String_Base::fast_rep () const { return this->rep_; } template ACE_INLINE const ACE_CHAR_T * ACE_String_Base::c_str () const { return this->rep_; } // Less than comparison operator. template ACE_INLINE bool ACE_String_Base::operator < (const ACE_String_Base &s) const { ACE_TRACE ("ACE_String_Base::operator <"); return compare (s) < 0; } // Greater than comparison operator. template ACE_INLINE bool ACE_String_Base::operator > (const ACE_String_Base &s) const { ACE_TRACE ("ACE_String_Base::operator >"); return compare (s) > 0; } // Comparison operator. template ACE_INLINE bool ACE_String_Base::operator!= (const ACE_String_Base &s) const { ACE_TRACE ("ACE_String_Base::operator!="); return !(*this == s); } template ACE_INLINE bool ACE_String_Base::operator!= (const ACE_CHAR_T *s) const { return !(*this == s); } template ACE_INLINE typename ACE_String_Base::size_type ACE_String_Base::find (const ACE_String_Base&str, typename ACE_String_Base::size_type pos) const { ACE_TRACE ("ACE_String_Base::find"); return this->find (str.rep_, pos); } template ACE_INLINE typename ACE_String_Base::size_type ACE_String_Base::strstr (const ACE_String_Base &s) const { ACE_TRACE ("ACE_String_Base::strstr"); return this->find (s.rep_); } template ACE_INLINE typename ACE_String_Base::iterator ACE_String_Base::begin () { ACE_TRACE ("ACE_String_Base::begin"); return iterator (*this); } template ACE_INLINE typename ACE_String_Base::const_iterator ACE_String_Base::begin () const { ACE_TRACE ("ACE_String_Base::begin"); return const_iterator (*this); } template ACE_INLINE typename ACE_String_Base::iterator ACE_String_Base::end () { ACE_TRACE ("ACE_String_Base::end"); return iterator (*this, 1); } template ACE_INLINE typename ACE_String_Base::const_iterator ACE_String_Base::end () const { ACE_TRACE ("ACE_String_Base::end"); return const_iterator (*this, 1); } // ---------------------------------------------- template ACE_INLINE ACE_String_Base_Iterator :: ACE_String_Base_Iterator (ACE_String_Base & str, int end) : str_ (&str), index_ (0 == end ? 0 : str.length ()) { ACE_TRACE ("ACE_String_Base_Iterator::ACE_String_Base_Iterator"); } template ACE_INLINE ACE_String_Base_Iterator :: ACE_String_Base_Iterator (const ACE_String_Base_Iterator & iter) : str_ (iter.str_), index_ (iter.index_) { ACE_TRACE ("ACE_String_Base_Iterator::ACE_String_Base_Iterator"); } template ACE_INLINE ACE_String_Base_Iterator ::~ACE_String_Base_Iterator () { ACE_TRACE ("ACE_String_Base_Iterator::~ACE_String_Base_Iterator"); } template ACE_INLINE int ACE_String_Base_Iterator ::done () const { ACE_TRACE ("ACE_String_Base_Iterator::done"); return this->index_ >= this->str_->length () ? 1 : 0; } template ACE_INLINE ACE_CHAR_T & ACE_String_Base_Iterator ::operator * () { ACE_TRACE ("ACE_String_Base_Iterator::operator *"); return this->str_->rep_[this->index_]; } template ACE_INLINE ACE_String_Base_Iterator & ACE_String_Base_Iterator ::operator ++ () { ACE_TRACE ("ACE_String_Base_Iterator::operator ++"); if (0 == this->done ()) ++ this->index_; return *this; } template ACE_INLINE ACE_String_Base_Iterator ACE_String_Base_Iterator ::operator ++ (int) { ACE_TRACE ("ACE_String_Base_Iterator::operator ++ (int)"); ACE_String_Base_Iterator temp (*this); if (0 == this->done ()) ++ this->index_; return temp; } template ACE_INLINE ACE_String_Base_Iterator & ACE_String_Base_Iterator ::operator -- () { ACE_TRACE ("ACE_String_Base_Iterator::operator --"); if (0 < this->index_) -- this->index_; return *this; } template ACE_INLINE ACE_String_Base_Iterator ACE_String_Base_Iterator ::operator -- (int) { ACE_TRACE ("ACE_String_Base_Iterator::operator -- (int)"); ACE_String_Base_Iterator temp (*this); if (0 < this->index_) -- this->index_; return temp; } template ACE_INLINE bool ACE_String_Base_Iterator :: operator == (const ACE_String_Base_Iterator & rhs) const { return this->index_ == rhs.index_; } template ACE_INLINE bool ACE_String_Base_Iterator :: operator != (const ACE_String_Base_Iterator & rhs) const { return this->index_ != rhs.index_; } template ACE_INLINE bool ACE_String_Base_Iterator :: operator < (const ACE_String_Base_Iterator & rhs) const { return this->index_ < rhs.index_; } template ACE_INLINE bool ACE_String_Base_Iterator :: operator > (const ACE_String_Base_Iterator & rhs) const { return this->index_ > rhs.index_; } template ACE_INLINE bool ACE_String_Base_Iterator :: operator >= (const ACE_String_Base_Iterator & rhs) const { return this->index_ >= rhs.index_; } template ACE_INLINE bool ACE_String_Base_Iterator :: operator <= (const ACE_String_Base_Iterator & rhs) const { return this->index_ <= rhs.index_; } // ---------------------------------------------- template ACE_INLINE ACE_String_Base_Const_Iterator :: ACE_String_Base_Const_Iterator (const ACE_String_Base & str, int end) : str_ (&str), index_ (0 == end ? 0 : str.length ()) { ACE_TRACE ("ACE_String_Base_Const_Iterator::ACE_String_Base_Const_Iterator"); } template ACE_INLINE ACE_String_Base_Const_Iterator :: ACE_String_Base_Const_Iterator (const ACE_String_Base_Const_Iterator & iter) : str_ (iter.str_), index_ (iter.index_) { ACE_TRACE ("ACE_String_Base_Const_Iterator::ACE_String_Base_Const_Iterator"); } template ACE_INLINE ACE_String_Base_Const_Iterator ::~ACE_String_Base_Const_Iterator () { ACE_TRACE ("ACE_String_Base_Const_Iterator::~ACE_String_Base_Const_Iterator"); } template ACE_INLINE int ACE_String_Base_Const_Iterator ::done () const { ACE_TRACE ("ACE_String_Base_Const_Iterator::done"); return this->index_ >= this->str_->length () ? 1 : 0; } template ACE_INLINE const ACE_CHAR_T & ACE_String_Base_Const_Iterator ::operator * () { ACE_TRACE ("ACE_String_Base_Const_Iterator::operator *"); return this->str_->rep_[this->index_]; } template ACE_INLINE ACE_String_Base_Const_Iterator & ACE_String_Base_Const_Iterator ::operator ++ () { ACE_TRACE ("ACE_String_Base_Const_Iterator::operator ++"); if (0 == this->done ()) ++ this->index_; return *this; } template ACE_INLINE ACE_String_Base_Const_Iterator ACE_String_Base_Const_Iterator ::operator ++ (int) { ACE_TRACE ("ACE_String_Base_Const_Iterator::operator ++ (int)"); ACE_String_Base_Const_Iterator temp (*this); if (0 == this->done ()) ++ this->index_; return temp; } template ACE_INLINE ACE_String_Base_Const_Iterator & ACE_String_Base_Const_Iterator ::operator -- () { ACE_TRACE ("ACE_String_Base_Const_Iterator::operator --"); if (0 < this->index_) -- this->index_; return *this; } template ACE_INLINE ACE_String_Base_Const_Iterator ACE_String_Base_Const_Iterator ::operator -- (int) { ACE_TRACE ("ACE_String_Base_Const_Iterator::operator -- (int)"); ACE_String_Base_Const_Iterator temp (*this); if (0 < this->index_) -- this->index_; return temp; } template ACE_INLINE bool ACE_String_Base_Const_Iterator :: operator == (const ACE_String_Base_Const_Iterator & rhs) const { return this->index_ == rhs.index_; } template ACE_INLINE bool ACE_String_Base_Const_Iterator :: operator != (const ACE_String_Base_Const_Iterator & rhs) const { return this->index_ != rhs.index_; } template ACE_INLINE bool ACE_String_Base_Const_Iterator :: operator < (const ACE_String_Base_Const_Iterator & rhs) const { return this->index_ < rhs.index_; } template ACE_INLINE bool ACE_String_Base_Const_Iterator :: operator > (const ACE_String_Base_Const_Iterator & rhs) const { return this->index_ > rhs.index_; } template ACE_INLINE bool ACE_String_Base_Const_Iterator :: operator >= (const ACE_String_Base_Const_Iterator & rhs) const { return this->index_ >= rhs.index_; } template ACE_INLINE bool ACE_String_Base_Const_Iterator :: operator <= (const ACE_String_Base_Const_Iterator & rhs) const { return this->index_ <= rhs.index_; } // ---------------------------------------------- template ACE_INLINE bool operator== (const ACE_CHAR_T *s, const ACE_String_Base &t) { return t == s; } template ACE_INLINE bool operator!= (const ACE_CHAR_T *s, const ACE_String_Base &t) { return !(t == s); } ACE_END_VERSIONED_NAMESPACE_DECL