ACE_String_Base< CHAR > Class Template Reference

This class provides a wrapper facade for C strings. More...

#include <String_Base.h>

Inheritance diagram for ACE_String_Base< CHAR >:

Inheritance graph
[legend]
Collaboration diagram for ACE_String_Base< CHAR >:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 ACE_String_Base (ACE_Allocator *the_allocator=0)
 ACE_String_Base (const CHAR *s, ACE_Allocator *the_allocator=0, bool release=true)
 ACE_String_Base (const CHAR *s, size_type len, ACE_Allocator *the_allocator=0, bool release=true)
 ACE_String_Base (const ACE_String_Base< CHAR > &s)
 ACE_String_Base (CHAR c, ACE_Allocator *the_allocator=0)
 ACE_String_Base (size_type len, CHAR c=0, ACE_Allocator *the_allocator=0)
 ~ACE_String_Base (void)
const CHAR & operator[] (size_type slot) const
CHAR & operator[] (size_type slot)
ACE_String_Base< CHAR > & operator= (const CHAR *s)
ACE_String_Base< CHAR > & operator= (const ACE_String_Base< CHAR > &s)
ACE_String_Base< CHAR > & assign_nocopy (const ACE_String_Base< CHAR > &s)
void set (const CHAR *s, bool release=true)
void set (const CHAR *s, size_type len, bool release)
void clear (bool release=false)
void fast_clear (void)
ACE_String_Base< CHAR > substring (size_type offset, size_type length=npos) const
ACE_String_Base< CHAR > substr (size_type offset, size_type length=npos) const
ACE_String_Base< CHAR > & operator+= (const ACE_String_Base< CHAR > &s)
ACE_String_Base< CHAR > & operator+= (const CHAR *s)
ACE_String_Base< CHAR > & operator+= (const CHAR c)
ACE_String_Base< CHAR > & append (const CHAR *s, size_type slen)
u_long hash (void) const
size_type length (void) const
size_t capacity (void) const
bool is_empty (void) const
bool empty (void) const
CHAR * rep (void) const
const CHAR * fast_rep (void) const
const CHAR * c_str (void) const
size_type strstr (const ACE_String_Base< CHAR > &s) const
size_type find (const ACE_String_Base< CHAR > &str, size_type pos=0) const
size_type find (const CHAR *s, size_type pos=0) const
size_type find (CHAR c, size_type pos=0) const
size_type rfind (CHAR c, size_type pos=npos) const
bool operator== (const ACE_String_Base< CHAR > &s) const
bool operator== (const CHAR *s) const
bool operator< (const ACE_String_Base< CHAR > &s) const
bool operator> (const ACE_String_Base< CHAR > &s) const
bool operator!= (const ACE_String_Base< CHAR > &s) const
bool operator!= (const CHAR *s) const
int compare (const ACE_String_Base< CHAR > &s) const
void dump (void) const
void resize (size_type len, CHAR c=0)
void fast_resize (size_t len)
void swap (ACE_String_Base< CHAR > &str)
 Swap the contents of this ACE_String_Base with str.

Public Attributes

 ACE_ALLOC_HOOK_DECLARE

Protected Attributes

ACE_Allocatorallocator_
size_type len_
size_type buf_len_
CHAR * rep_
bool release_

Static Protected Attributes

static CHAR NULL_String_ = 0

Detailed Description

template<class CHAR>
class ACE_String_Base< CHAR >

This class provides a wrapper facade for C strings.

This class uses an ACE_Allocator to allocate memory. The user can make this a persistant class by providing an ACE_Allocator with a persistable memory pool. This class is optimized for efficiency, so it doesn't provide any internal locking.

Note:
If an instance of this class is constructed from or assigned an empty string (with first element of ''), then it is not allocated new space. Instead, its internal representation is set equal to a global empty string. CAUTION: in cases when ACE_String_Base is constructed from a provided buffer with the release parameter set to false, ACE_String_Base is not guaranteed to be '' terminated.

Definition at line 58 of file String_Base.h.


Constructor & Destructor Documentation

template<class CHAR>
ACE_String_Base< CHAR >::ACE_String_Base ( ACE_Allocator the_allocator = 0  ) 

Default constructor.

Parameters:
the_allocator ACE_Allocator associated with string
Returns:
Default ACE_String_Base string.

Definition at line 28 of file String_Base.cpp.

References ACE_TRACE.

00029   : allocator_ (the_allocator ? the_allocator : ACE_Allocator::instance ()),
00030     len_ (0),
00031     buf_len_ (0),
00032     rep_ (&ACE_String_Base<CHAR>::NULL_String_),
00033     release_ (false)
00034 {
00035   ACE_TRACE ("ACE_String_Base<CHAR>::ACE_String_Base");
00036 }

template<class CHAR>
ACE_String_Base< CHAR >::ACE_String_Base ( const CHAR *  s,
ACE_Allocator the_allocator = 0,
bool  release = true 
)

Constructor that copies s into dynamically allocated memory.

if release == true then a new buffer is allocated internally, and s is copied to the internal buffer. if release == false then the s buffer is used directly. If s == 0 then it will _not_ be used, and instead the internal buffer is set to NULL_String_.

Parameters:
s Zero terminated input string
the_allocator ACE_Allocator associated with string
release Allocator responsible(true)/not reponsible(false) for freeing memory.
Returns:
ACE_String_Base containing const CHAR *s

Definition at line 41 of file String_Base.cpp.

References ACE_TRACE, and ACE_String_Base< CHAR >::set().

00044   : allocator_ (the_allocator ? the_allocator : ACE_Allocator::instance ()),
00045     len_ (0),
00046     buf_len_ (0),
00047     rep_ (0),
00048     release_ (false)
00049 {
00050   ACE_TRACE ("ACE_String_Base<CHAR>::ACE_String_Base");
00051   this->set (s, release);
00052 }

template<class CHAR>
ACE_String_Base< CHAR >::ACE_String_Base ( const CHAR *  s,
size_type  len,
ACE_Allocator the_allocator = 0,
bool  release = true 
)

Constructor that copies len CHARs of s into dynamically allocated memory (will zero terminate the result).

if release == true then a new buffer is allocated internally. s is copied to the internal buffer. if release == false then the s buffer is used directly. If s == 0 then it will _not_ be used, and instead the internal buffer is set to NULL_String_.

Parameters:
s Non-zero terminated input string
len Length of non-zero terminated input string
the_allocator ACE_Allocator associated with string
release Allocator responsible(true)/not reponsible(false) for freeing memory.
Returns:
ACE_String_Base containing const CHAR *s

template<class CHAR>
ACE_String_Base< CHAR >::ACE_String_Base ( const ACE_String_Base< CHAR > &  s  ) 

Copy constructor.

Parameters:
s Input ACE_String_Base string to copy
Returns:
Copy of input string s

Definition at line 90 of file String_Base.cpp.

References ACE_TRACE, ACE_String_Base< CHAR >::len_, ACE_String_Base< CHAR >::rep_, and ACE_String_Base< CHAR >::set().

00091   : allocator_ (s.allocator_ ? s.allocator_ : ACE_Allocator::instance ()),
00092     len_ (0),
00093     buf_len_ (0),
00094     rep_ (0),
00095     release_ (false)
00096 {
00097   ACE_TRACE ("ACE_String_Base<CHAR>::ACE_String_Base");
00098 
00099   this->set (s.rep_, s.len_, true);
00100 }

template<class CHAR>
ACE_String_Base< CHAR >::ACE_String_Base ( CHAR  c,
ACE_Allocator the_allocator = 0 
)

Constructor that copies c into dynamically allocated memory.

Parameters:
c Single input character.
the_allocator ACE_Allocator associated with string
Returns:
ACE_String_Base containing CHAR 'c'

Definition at line 55 of file String_Base.cpp.

References ACE_TRACE, and ACE_String_Base< CHAR >::set().

00057   : allocator_ (the_allocator ? the_allocator : ACE_Allocator::instance ()),
00058     len_ (0),
00059     buf_len_ (0),
00060     rep_ (0),
00061     release_ (false)
00062 {
00063   ACE_TRACE ("ACE_String_Base<CHAR>::ACE_String_Base");
00064 
00065   this->set (&c, 1, true);
00066 }

template<class CHAR>
ACE_String_Base< CHAR >::ACE_String_Base ( size_type  len,
CHAR  c = 0,
ACE_Allocator the_allocator = 0 
)

Constructor that allocates a len long string.

Warning : This constructor was incorrectly documented in the past. It simply calls resize(len, c). It is probably not advisable to use the second parameter. See resize() for more information.

Parameters:
len Amount of space to reserve for the string.
c The array is filled with c's
the_allocator ACE_Allocator associated with string
Returns:
Empty ACE_String_Base with room for len CHARs

template<class CHAR>
ACE_String_Base< CHAR >::~ACE_String_Base ( void   ) 

Deletes the memory...

Definition at line 119 of file String_Base.cpp.

References ACE_TRACE, ACE_String_Base< CHAR >::allocator_, and ACE_Allocator::free().

00120 {
00121   ACE_TRACE ("ACE_String_Base<CHAR>::~ACE_String_Base");
00122 
00123   if (this->buf_len_ != 0 && this->release_)
00124       this->allocator_->free (this->rep_);
00125 }


Member Function Documentation

template<class CHAR>
ACE_String_Base< CHAR >& ACE_String_Base< CHAR >::append ( const CHAR *  s,
size_type  slen 
)

Append function (copies memory).

Parameters:
s Input CHAR array to concatenate to this string.
slen The length of the array.
Returns:
The combined string (input append to the end of the old). New string is zero terminated.

Referenced by operator+(), and ACE_String_Base< CHAR >::operator+=().

template<class CHAR>
ACE_INLINE ACE_String_Base< CHAR > & ACE_String_Base< CHAR >::assign_nocopy ( const ACE_String_Base< CHAR > &  s  ) 

Assignment alternative method (does not copy memory).

Parameters:
s Input ACE_String_Base string to assign to this object.
Returns:
Return this string.

Definition at line 22 of file String_Base.inl.

References ACE_TRACE, ACE_String_Base< CHAR >::len_, ACE_String_Base< CHAR >::rep_, and ACE_String_Base< CHAR >::set().

Referenced by ACE_Configuration_Heap::load_key().

00023 {
00024   ACE_TRACE ("ACE_String_Base<CHAR>::assign_nocopy");
00025   this->set (s.rep_, s.len_, false);
00026   return *this;
00027 }

template<class CHAR>
ACE_INLINE const CHAR * ACE_String_Base< CHAR >::c_str ( void   )  const

Same as STL String's <c_str> and <fast_rep>.

Definition at line 91 of file String_Base.inl.

References ACE_String_Base< CHAR >::rep_.

Referenced by ACE_Message_Queue< ACE_SYNCH_USE >::ACE_Message_Queue(), ACE_Get_Opt::dump(), ACE_Utils::UUID::from_string_i(), ACE_Capabilities::getent(), ACE_Capabilities::is_entry(), ACE_Get_Opt::last_option(), ACE_Codeset_Registry::locale_to_registry(), ACE::Monitor_Control::Monitor_Base::name(), ACE_DLL_Handle::open(), ACE_Configuration::operator==(), ACE_Get_Opt::optstring(), ACE_Utils::UUID::to_string(), ACE_OutputCDR::write_string(), and ACE_SizeCDR::write_string().

00092 {
00093   return this->rep_;
00094 }

template<class CHAR>
ACE_INLINE size_t ACE_String_Base< CHAR >::capacity ( void   )  const

Return the number of allocated CHARs in the string object. This may be greater than the current length of the string.

Returns:
Maximum number of CHAR units that can be stored, including any terminating nul that may be needed.

Definition at line 37 of file String_Base.inl.

References ACE_TRACE, and ACE_String_Base< CHAR >::buf_len_.

00038 {
00039   ACE_TRACE ("ACE_String_Base<CHAR>::capacity");
00040   return this->buf_len_;
00041 }

template<class CHAR>
void ACE_String_Base< CHAR >::clear ( bool  release = false  ) 

Clear this string. Memory is _not_ freed if release is false.

Warning: This method was incorrectly documented in the past, but the current implementation has been changed to match the documented behavior.

Warning: clear(false) behaves like fast_clear() below.

Parameters:
release Memory is freed if true, and not freed if false.

Definition at line 296 of file String_Base.cpp.

References ACE_String_Base< CHAR >::allocator_, ACE_String_Base< CHAR >::buf_len_, ACE_String_Base< CHAR >::fast_clear(), ACE_Allocator::free(), ACE_String_Base< CHAR >::len_, ACE_String_Base< CHAR >::release_, and ACE_String_Base< CHAR >::rep_.

00297 {
00298   // This can't use set(), because that would free memory if release=false
00299   if (release)
00300   {
00301     if (this->buf_len_ != 0 && this->release_)
00302       this->allocator_->free (this->rep_);
00303 
00304     this->rep_ = &ACE_String_Base<CHAR>::NULL_String_;
00305     this->len_ = 0;
00306     this->buf_len_ = 0;
00307     this->release_ = false;
00308   }
00309   else
00310     {
00311       this->fast_clear ();
00312     }
00313 }

template<class CHAR>
int ACE_String_Base< CHAR >::compare ( const ACE_String_Base< CHAR > &  s  )  const

Performs a strncmp comparison.

Parameters:
s Input ACE_String_Base string to compare against stored string.
Returns:
Integer value of result (less than 0, 0, greater than 0) depending on how input string s is to the stored string.

Definition at line 383 of file String_Base.cpp.

References ace_min(), ACE_TRACE, ACE_String_Base< CHAR >::len_, ACE_OS::memcmp(), and ACE_String_Base< CHAR >::rep_.

Referenced by ACE_String_Base< CHAR >::operator<().

00384 {
00385   ACE_TRACE ("ACE_String_Base<CHAR>::compare");
00386 
00387   if (this->rep_ == s.rep_)
00388     return 0;
00389 
00390   // Pick smaller of the two lengths and perform the comparison.
00391   size_type smaller_length = ace_min (this->len_, s.len_);
00392 
00393   int result = ACE_OS::memcmp (this->rep_,
00394                                s.rep_,
00395                                smaller_length * sizeof (CHAR));
00396 
00397   if (!result)
00398     result = static_cast<int> (this->len_ - s.len_);
00399   return result;
00400 }

template<class CHAR>
ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE void ACE_String_Base< CHAR >::dump ( void   )  const

Dump the state of an object.

Definition at line 13 of file String_Base.inl.

References ACE_TRACE.

00014 {
00015 #if defined (ACE_HAS_DUMP)
00016   ACE_TRACE ("ACE_String_Base<CHAR>::dump");
00017 #endif /* ACE_HAS_DUMP */
00018 }

template<class CHAR>
ACE_INLINE bool ACE_String_Base< CHAR >::empty ( void   )  const

Return true if the length of the string is zero, else false. We recommend using is_empty() instead since it's more consistent with the ACE container naming conventions.

Definition at line 50 of file String_Base.inl.

References ACE_String_Base< CHAR >::is_empty().

00051 {
00052   return this->is_empty ();
00053 }

template<class CHAR>
void ACE_String_Base< CHAR >::fast_clear ( void   ) 

A more specialized version of clear(): "fast clear". fast_clear() resets the string to 0 length. If the string owns the buffer (

If Warning : Calling clear(false) or fast_clear() can have unintended side-effects if the string was constructed (or set()) with an external buffer. The string will be disassociated with the buffer and the next append() or +=() will cause a new buffer to be allocated internally.

Definition at line 351 of file String_Base.cpp.

References ACE_String_Base< CHAR >::buf_len_, ACE_String_Base< CHAR >::len_, and ACE_String_Base< CHAR >::rep_.

Referenced by ACE_String_Base< CHAR >::clear().

00352 {
00353   this->len_ = 0;
00354   if (this->release_)
00355     {
00356       // String retains the original buffer.
00357       if (this->rep_ != &ACE_String_Base<CHAR>::NULL_String_)
00358         this->rep_[0] = 0;
00359     }
00360   else
00361     {
00362       // External buffer: string relinquishes control of it.
00363       this->buf_len_ = 0;
00364       this->rep_ = &ACE_String_Base<CHAR>::NULL_String_;
00365     }
00366 }

template<class CHAR>
ACE_INLINE const CHAR * ACE_String_Base< CHAR >::fast_rep ( void   )  const

Get at the underlying representation directly! _Don't_ even think about casting the result to (char *) and modifying it, if it has length 0!

Returns:
Pointer reference to the stored string data. No guarantee is that the string is zero terminated.

Definition at line 85 of file String_Base.inl.

References ACE_String_Base< CHAR >::rep_.

Referenced by ACE_Configuration_Heap::add_section(), ACE_Ini_ImpExp::export_section(), ACE_Registry_ImpExp::export_section(), ACE_Configuration_Heap::find_value(), ACE_Configuration_Heap::get_binary_value(), ACE_Configuration_Heap::get_integer_value(), ACE_Configuration_Heap::get_string_value(), ACE_Configuration_Heap::new_section(), ACE_Configuration_Heap::open_simple_section(), operator<<(), ACE_Configuration_Heap::remove_section(), ACE_Configuration_Heap::remove_value(), ACE_Configuration_Heap::set_binary_value(), ACE_Configuration_Heap::set_integer_value(), and ACE_Configuration_Heap::set_string_value().

00086 {
00087   return this->rep_;
00088 }

template<class CHAR>
void ACE_String_Base< CHAR >::fast_resize ( size_t  len  ) 

Definition at line 275 of file String_Base.cpp.

References ACE_TRACE, ACE_String_Base< CHAR >::allocator_, ACE_String_Base< CHAR >::buf_len_, ACE_Allocator::free(), ACE_String_Base< CHAR >::len_, ACE_Allocator::malloc(), ACE_String_Base< CHAR >::release_, and ACE_String_Base< CHAR >::rep_.

00276 {
00277   ACE_TRACE ("ACE_String_Base<CHAR>::fast_resize");
00278 
00279   // Only reallocate if we don't have enough space...
00280   if (this->buf_len_ <= len)
00281     {
00282       if (this->buf_len_ != 0 && this->release_)
00283         this->allocator_->free (this->rep_);
00284 
00285       this->rep_ = static_cast<CHAR*>
00286                      (this->allocator_->malloc ((len + 1) * sizeof (CHAR)));
00287       this->buf_len_ = len + 1;
00288       this->release_ = true;
00289     }
00290   this->len_ = 0;
00291   if (len > 0)
00292     this->rep_[0] = 0;
00293 }

template<class CHAR>
size_type ACE_String_Base< CHAR >::find ( CHAR  c,
size_type  pos = 0 
) const

Find c starting at pos. Returns the slot of the first location that matches (will be >= pos), else npos.

Parameters:
c Input character to search for in stored string.
pos Starting index position to start searching for string str.
Returns:
Index value of the first location of string str else npos.

template<class CHAR>
size_type ACE_String_Base< CHAR >::find ( const CHAR *  s,
size_type  pos = 0 
) const

Find s starting at pos. Returns the slot of the first location that matches (will be >= pos), else npos.

Parameters:
s non-zero input string to search for in stored string.
pos Starting index position to start searching for string str.
Returns:
Index value of the first location of string str else npos.

template<class CHAR>
size_type ACE_String_Base< CHAR >::find ( const ACE_String_Base< CHAR > &  str,
size_type  pos = 0 
) const

Find <str> starting at pos. Returns the slot of the first location that matches (will be >= pos), else npos.

Parameters:
str Input ACE_String_Base string to search for in stored string.
pos Starting index position to start searching for string str.
Returns:
Index value of the first location of string str else npos.

Referenced by ACE_Utils::UUID::from_string_i(), and ACE_String_Base< CHAR >::strstr().

template<class CHAR>
u_long ACE_String_Base< CHAR >::hash ( void   )  const

Returns a hash value for this string.

Returns:
Hash value of string

Definition at line 256 of file String_Base.cpp.

References ACE::hash_pjw().

Referenced by ACE_Configuration_ExtId::hash(), and ACE_Hash< ACE_CString >::operator()().

00257 {
00258   return
00259     ACE::hash_pjw (reinterpret_cast<char *> (
00260                       const_cast<CHAR *> (this->rep_)),
00261                    this->len_ * sizeof (CHAR));
00262 }

template<class CHAR>
ACE_INLINE bool ACE_String_Base< CHAR >::is_empty ( void   )  const

Return true if the length of the string is zero, else false.

Definition at line 44 of file String_Base.inl.

References ACE_String_Base< CHAR >::len_.

Referenced by ACE_String_Base< CHAR >::empty().

00045 {
00046   return this->len_ == 0;
00047 }

template<class CHAR>
ACE_INLINE ACE_String_Base< CHAR >::size_type ACE_String_Base< CHAR >::length ( void   )  const

Return the length of the string.

Returns:
Length of stored string

Definition at line 30 of file String_Base.inl.

References ACE_TRACE, and ACE_String_Base< CHAR >::len_.

Referenced by ACE_Configuration_Heap::add_section(), ACE_Remote_Name_Space::bind(), ACE_Ini_ImpExp::export_section(), ACE_Registry_ImpExp::export_section(), ACE_Utils::UUID::from_string_i(), ACE_DLL_Handle::get_dll_names(), ACE_Capabilities::getline(), ACE_Remote_Name_Space::list_name_entries(), ACE_Remote_Name_Space::list_names(), ACE_Remote_Name_Space::list_type_entries(), ACE_Remote_Name_Space::list_types(), ACE_Remote_Name_Space::list_value_entries(), ACE_Remote_Name_Space::list_values(), ACE_Configuration_Heap::new_section(), ACE_DLL_Handle::open(), ACE_Configuration_Heap::open_simple_section(), operator+(), ACE_Remote_Name_Space::rebind(), ACE_Configuration_Heap::remove_section(), ACE_Remote_Name_Space::resolve(), ACE_Configuration_Heap::set_string_value(), ACE_Local_Name_Space<, ACE_LOCK >::shared_bind_i(), ACE_Utils::UUID::to_string(), ACE_Remote_Name_Space::unbind(), ACE_OutputCDR::write_string(), and ACE_SizeCDR::write_string().

00031 {
00032   ACE_TRACE ("ACE_String_Base<CHAR>::length");
00033   return this->len_;
00034 }

template<class CHAR>
ACE_INLINE bool ACE_String_Base< CHAR >::operator!= ( const CHAR *  s  )  const

Inequality comparison operator.

Parameters:
s Null terminated string to compare against stored string.
Returns:
true if not equal, false otherwise.

Definition at line 125 of file String_Base.inl.

00126 {
00127   return !(*this == s);
00128 }

template<class CHAR>
ACE_INLINE bool ACE_String_Base< CHAR >::operator!= ( const ACE_String_Base< CHAR > &  s  )  const

Inequality comparison operator.

Parameters:
s String to compare against stored string.
Returns:
true if not equal, false otherwise.

Definition at line 118 of file String_Base.inl.

References ACE_TRACE.

00119 {
00120   ACE_TRACE ("ACE_String_Base<CHAR>::operator!=");
00121   return !(*this == s);
00122 }

template<class CHAR>
ACE_String_Base< CHAR > & ACE_String_Base< CHAR >::operator+= ( const CHAR  c  ) 

Concat operator (copies memory).

Parameters:
c Input CHAR to concatenate to this string.
Returns:
The combined string (input append to the end of the old). New string is zero terminated.

Definition at line 554 of file String_Base.cpp.

References ACE_TRACE, and ACE_String_Base< CHAR >::append().

00555 {
00556   ACE_TRACE ("ACE_String_Base<CHAR>::operator+=(const CHAR)");
00557   const size_type slen = 1;
00558   return this->append (&c, slen);
00559 }

template<class CHAR>
ACE_String_Base< CHAR > & ACE_String_Base< CHAR >::operator+= ( const CHAR *  s  ) 

Concat operator (copies memory).

Parameters:
s Input C string to concatenate to this string.
Returns:
The combined string (input append to the end of the old). New string is zero terminated.

Definition at line 536 of file String_Base.cpp.

References ACE_String_Base< CHAR >::append(), and ACE_OS::strlen().

00537 {
00538   size_t slen = 0;
00539   if (s != 0)
00540     slen = ACE_OS::strlen (s);
00541   return this->append (s, slen);
00542 }

template<class CHAR>
ACE_String_Base< CHAR > & ACE_String_Base< CHAR >::operator+= ( const ACE_String_Base< CHAR > &  s  ) 

Concat operator (copies memory).

Parameters:
s Input ACE_String_Base string to concatenate to this string.
Returns:
The combined string (input append to the end of the old). New string is zero terminated.

Definition at line 546 of file String_Base.cpp.

References ACE_TRACE, ACE_String_Base< CHAR >::append(), ACE_String_Base< CHAR >::len_, and ACE_String_Base< CHAR >::rep_.

00547 {
00548   ACE_TRACE ("ACE_String_Base<CHAR>::operator+=(const ACE_String_Base<CHAR> &)");
00549   return this->append (s.rep_, s.len_);
00550 }

template<class CHAR>
ACE_INLINE bool ACE_String_Base< CHAR >::operator< ( const ACE_String_Base< CHAR > &  s  )  const

Less than comparison operator.

Parameters:
s Input ACE_String_Base string to compare against stored string.
Returns:
true if less than, false otherwise.

Definition at line 99 of file String_Base.inl.

References ACE_TRACE, and ACE_String_Base< CHAR >::compare().

00100 {
00101   ACE_TRACE ("ACE_String_Base<CHAR>::operator <");
00102   return compare (s) < 0;
00103 }

template<class CHAR>
ACE_String_Base< CHAR > & ACE_String_Base< CHAR >::operator= ( const ACE_String_Base< CHAR > &  s  ) 

Assignment operator (does copy memory).

Parameters:
s Input ACE_String_Base string to assign to this object.
Returns:
Return a copy of the this string.

Definition at line 327 of file String_Base.cpp.

References ACE_TRACE, ACE_String_Base< CHAR >::len_, ACE_String_Base< CHAR >::rep_, and ACE_String_Base< CHAR >::set().

00328 {
00329   ACE_TRACE ("ACE_String_Base<CHAR>::operator=");
00330 
00331   // Check for self-assignment.
00332   if (this != &s)
00333     {
00334       this->set (s.rep_, s.len_, true);
00335     }
00336 
00337   return *this;
00338 }

template<class CHAR>
ACE_String_Base< CHAR > & ACE_String_Base< CHAR >::operator= ( const CHAR *  s  ) 

Assignment operator (does copy memory).

Parameters:
s Input null-terminated CHAR string to assign to this object.
Returns:
Return a copy of the this string.

Definition at line 317 of file String_Base.cpp.

References ACE_TRACE, and ACE_String_Base< CHAR >::set().

00318 {
00319   ACE_TRACE ("ACE_String_Base<CHAR>::operator=");
00320   if (s != 0)
00321     this->set (s, true);
00322   return *this;
00323 }

template<class CHAR>
bool ACE_String_Base< CHAR >::operator== ( const CHAR *  s  )  const

Equality comparison operator (must match entire string).

Parameters:
s Null terminated string to compare against stored string.
Returns:
true if equal, false otherwise.

Definition at line 414 of file String_Base.cpp.

References ACE_String_Base< CHAR >::len_, ACE_OS::memcmp(), and ACE_OS::strlen().

00415 {
00416   size_t len = ACE_OS::strlen (s);
00417   return this->len_ == len &&
00418          ACE_OS::memcmp (this->rep_,
00419                          s,
00420                          len * sizeof (CHAR)) == 0;
00421 }

template<class CHAR>
bool ACE_String_Base< CHAR >::operator== ( const ACE_String_Base< CHAR > &  s  )  const

Equality comparison operator (must match entire string).

Parameters:
s Input ACE_String_Base string to compare against stored string.
Returns:
true if equal, false otherwise.

Definition at line 405 of file String_Base.cpp.

References ACE_String_Base< CHAR >::len_, ACE_OS::memcmp(), and ACE_String_Base< CHAR >::rep_.

00406 {
00407   return this->len_ == s.len_ &&
00408          ACE_OS::memcmp (this->rep_,
00409                          s.rep_,
00410                          this->len_ * sizeof (CHAR)) == 0;
00411 }

template<class CHAR>
bool ACE_String_Base< CHAR >::operator> ( const ACE_String_Base< CHAR > &  s  )  const

Greater than comparison operator.

Parameters:
s Input ACE_String_Base string to compare against stored string.
Returns:
true if greater than, false otherwise.

template<class CHAR>
CHAR& ACE_String_Base< CHAR >::operator[] ( size_type  slot  ) 

Return the <slot'th> character by reference in the string (doesn't perform bounds checking).

Parameters:
slot Index of the desired character
Returns:
The character at index slot

template<class CHAR>
const CHAR& ACE_String_Base< CHAR >::operator[] ( size_type  slot  )  const

Return the <slot'th> character in the string (doesn't perform bounds checking).

Parameters:
slot Index of the desired character
Returns:
The character at index slot

template<class CHAR>
CHAR * ACE_String_Base< CHAR >::rep ( void   )  const

Get a copy of the underlying representation.

This method allocates memory for a copy of the string and returns a pointer to the new area. The caller is responsible for freeing the memory when finished; use delete []

Returns:
Pointer reference to the string data. Returned string is zero terminated.

Definition at line 371 of file String_Base.cpp.

References ACE_NEW_RETURN, ACE_TRACE, and ACE_OS::strsncpy().

Referenced by ACE_Remote_Name_Space::bind(), ACE_Configuration::expand_path(), ACE_Remote_Name_Space::list_name_entries(), ACE_Remote_Name_Space::list_names(), ACE_Remote_Name_Space::list_type_entries(), ACE_Remote_Name_Space::list_types(), ACE_Remote_Name_Space::list_value_entries(), ACE_Remote_Name_Space::list_values(), ACE_Remote_Name_Space::rebind(), ACE_Remote_Name_Space::resolve(), ACE_Local_Name_Space<, ACE_LOCK >::shared_bind_i(), and ACE_Remote_Name_Space::unbind().

00372 {
00373   ACE_TRACE ("ACE_String_Base<CHAR>::rep");
00374 
00375   CHAR *new_string;
00376   ACE_NEW_RETURN (new_string, CHAR[this->len_ + 1], 0);
00377   ACE_OS::strsncpy (new_string, this->rep_, this->len_+1);
00378 
00379   return new_string;
00380 }

template<class CHAR>
void ACE_String_Base< CHAR >::resize ( size_type  len,
CHAR  c = 0 
)

This method is designed for high-performance. Please use with care ;-)

Warning : This method was documented incorrectly in the past. The original intention was to change the length of the string to len, and to fill the whole thing with c CHARs. However, what was actually done was to set the length of the string to zero, and fill the buffer with c's. The buffer was also not null-terminated unless c happened to be zero. Rather than fix the method to work as documented, the code is left as is, but the second parameter should probably not be used.

fast_resize just adjusts the buffer if needed and sets the length, it doesn't fill the buffer, so is much faster.

Parameters:
len The number of CHARs to reserve
c The CHAR to use when filling the string.

template<class CHAR>
size_type ACE_String_Base< CHAR >::rfind ( CHAR  c,
size_type  pos = npos 
) const

Find c starting at pos (counting from the end). Returns the slot of the first location that matches, else npos.

Parameters:
c Input character to search for in stored string.
pos Starting index position to start searching for string str.
Returns:
Index value of the first location of string str else npos.

Referenced by ACE_DLL_Handle::get_dll_names().

template<class CHAR>
void ACE_String_Base< CHAR >::set ( const CHAR *  s,
size_type  len,
bool  release 
)

Copy len bytes of s (will zero terminate the result).

If release == true then a new buffer is allocated internally if the existing one is not big enough to hold s. If the existing buffer is big enough, then it will be used. This means that set(*, *, 1) is illegal when the string is constructed with a non-owned const char*. (e.g. ACE_String_Base("test", 0, 0))

If release == false then the s buffer is used directly, and any existing buffer is destroyed. If s == 0 then it will _not_ be used, and instead the internal buffer is set to NULL_String_.

Parameters:
s Non-zero terminated input string
len Length of input string 's'
release Allocator responsible(true)/not reponsible(false) for freeing memory.

template<class CHAR>
void ACE_String_Base< CHAR >::set ( const CHAR *  s,
bool  release = true 
)

Copy s into this ACE_String_Base.

If release == true then a new buffer is allocated internally if the existing one is not big enough to hold s. If the existing buffer is big enough, then it will be used. This means that set(*, 1) can be illegal when the string is constructed with a const char*. (e.g. ACE_String_Base("test", 0, false)).

if release == false then the s buffer is used directly, and any existing buffer is destroyed. If s == 0 then it will _not_ be used, and instead the internal buffer is set to NULL_String_.

Parameters:
s Null terminated input string
release Allocator responsible(true)/not reponsible(false) for freeing memory.

Definition at line 341 of file String_Base.cpp.

References ACE_OS::strlen().

Referenced by ACE_String_Base< CHAR >::ACE_String_Base(), ACE_String_Base< CHAR >::assign_nocopy(), ACE_Capabilities::getline(), ACE_String_Base< CHAR >::operator=(), ACE_Codeset_Registry::registry_to_locale(), and ACE_Codeset_Registry::registry_to_locale_i().

00342 {
00343   size_t length = 0;
00344   if (s != 0)
00345     length = ACE_OS::strlen (s);
00346 
00347   this->set (s, length, release);
00348 }

template<class CHAR>
ACE_INLINE ACE_String_Base< CHAR >::size_type ACE_String_Base< CHAR >::strstr ( const ACE_String_Base< CHAR > &  s  )  const

Comparison operator that will match substrings. Returns the slot of the first location that matches, else npos.

Parameters:
s Input ACE_String_Base string
Returns:
Integer index value of the first location of string s or npos (not found).

Definition at line 139 of file String_Base.inl.

References ACE_TRACE, ACE_String_Base< CHAR >::find(), and ACE_String_Base< CHAR >::rep_.

Referenced by ACE_DLL_Handle::open().

00140 {
00141   ACE_TRACE ("ACE_String_Base<CHAR>::strstr");
00142   return this->find (s.rep_);
00143 }

template<class CHAR>
ACE_String_Base< CHAR > ACE_String_Base< CHAR >::substr ( size_type  offset,
size_type  length = npos 
) const

Same as <substring>.

Parameters:
offset Index of first desired character of the substring.
length How many characters to return starting at the offset.
Returns:
The string containing the desired substring

Referenced by ACE_Utils::UUID::from_string_i(), and ACE_DLL_Handle::get_dll_names().

template<class CHAR>
ACE_String_Base< CHAR > ACE_String_Base< CHAR >::substring ( size_type  offset,
size_type  length = npos 
) const

Return a substring given an offset and length. If length == npos use rest of str. Return empty substring if offset or offset/length are invalid.

Parameters:
offset Index of first desired character of the substring.
length How many characters to return starting at the offset.
Returns:
The string containing the desired substring

template<class CHAR>
void ACE_String_Base< CHAR >::swap ( ACE_String_Base< CHAR > &  str  ) 

Swap the contents of this ACE_String_Base with str.

Note:
This is non-throwing operation.

Definition at line 468 of file String_Base.cpp.

References ACE_String_Base< CHAR >::allocator_, ACE_String_Base< CHAR >::buf_len_, ACE_String_Base< CHAR >::len_, ACE_String_Base< CHAR >::release_, and ACE_String_Base< CHAR >::rep_.

00469 {
00470   std::swap (this->allocator_ , str.allocator_);
00471   std::swap (this->len_       , str.len_);
00472   std::swap (this->buf_len_   , str.buf_len_);
00473   std::swap (this->rep_       , str.rep_);
00474   std::swap (this->release_   , str.release_);
00475 }


Member Data Documentation

template<class CHAR>
ACE_String_Base< CHAR >::ACE_ALLOC_HOOK_DECLARE

Declare the dynamic allocation hooks.

Definition at line 535 of file String_Base.h.

template<class CHAR>
ACE_Allocator* ACE_String_Base< CHAR >::allocator_ [protected]

Pointer to a memory allocator.

Definition at line 541 of file String_Base.h.

Referenced by ACE_String_Base< CHAR >::clear(), ACE_String_Base< CHAR >::fast_resize(), ACE_String_Base< CHAR >::swap(), and ACE_String_Base< CHAR >::~ACE_String_Base().

template<class CHAR>
size_type ACE_String_Base< CHAR >::buf_len_ [protected]

Length of the ACE_String_Base data buffer. Keeping track of the length allows to avoid unnecessary dynamic allocations.

Definition at line 552 of file String_Base.h.

Referenced by ACE_NS_WString::ACE_NS_WString(), ACE_String_Base< CHAR >::capacity(), ACE_String_Base< CHAR >::clear(), ACE_String_Base< CHAR >::fast_clear(), ACE_String_Base< CHAR >::fast_resize(), and ACE_String_Base< CHAR >::swap().

template<class CHAR>
size_type ACE_String_Base< CHAR >::len_ [protected]

Length of the ACE_String_Base data (not counting the trailing '').

Definition at line 546 of file String_Base.h.

Referenced by ACE_NS_WString::ACE_NS_WString(), ACE_String_Base< CHAR >::ACE_String_Base(), ACE_String_Base< CHAR >::assign_nocopy(), ACE_NS_WString::char_rep(), ACE_String_Base< CHAR >::clear(), ACE_String_Base< CHAR >::compare(), ACE_String_Base< CHAR >::fast_clear(), ACE_String_Base< CHAR >::fast_resize(), ACE_String_Base< CHAR >::is_empty(), ACE_String_Base< CHAR >::length(), ACE_String_Base< CHAR >::operator+=(), ACE_String_Base< CHAR >::operator=(), ACE_String_Base< CHAR >::operator==(), ACE_String_Base< CHAR >::swap(), and ACE_NS_WString::ushort_rep().

template<class CHAR>
ACE_BEGIN_VERSIONED_NAMESPACE_DECL CHAR ACE_String_Base< CHAR >::NULL_String_ = 0 [static, protected]

Represents the "NULL" string to simplify the internal logic.

Definition at line 567 of file String_Base.h.

template<class CHAR>
bool ACE_String_Base< CHAR >::release_ [protected]

Flag that indicates if we own the memory

Definition at line 562 of file String_Base.h.

Referenced by ACE_NS_WString::ACE_NS_WString(), ACE_String_Base< CHAR >::clear(), ACE_String_Base< CHAR >::fast_resize(), and ACE_String_Base< CHAR >::swap().

template<class CHAR>
CHAR* ACE_String_Base< CHAR >::rep_ [protected]

Pointer to data.

Definition at line 557 of file String_Base.h.

Referenced by ACE_String_Base< CHAR >::ACE_String_Base(), ACE_String_Base< CHAR >::assign_nocopy(), ACE_String_Base< CHAR >::c_str(), ACE_String_Base< CHAR >::clear(), ACE_String_Base< CHAR >::compare(), ACE_String_Base< CHAR >::fast_clear(), ACE_String_Base< CHAR >::fast_rep(), ACE_String_Base< CHAR >::fast_resize(), ACE_String_Base< CHAR >::operator+=(), ACE_String_Base< CHAR >::operator=(), ACE_String_Base< CHAR >::operator==(), ACE_String_Base< CHAR >::strstr(), and ACE_String_Base< CHAR >::swap().


The documentation for this class was generated from the following files:
Generated on Tue Feb 2 17:35:42 2010 for ACE by  doxygen 1.4.7