diff options
author | maximius <none@none> | 2009-10-17 15:51:44 -0700 |
---|---|---|
committer | maximius <none@none> | 2009-10-17 15:51:44 -0700 |
commit | e585187b248f48b3c6e9247b49fa07c6565d65e5 (patch) | |
tree | 637c5b7ddacf41040bef4ea4f75a97da64c6a9bc /dep/ACE_wrappers/ace/SString.cpp | |
parent | 26b5e033ffde3d161382fc9addbfa99738379641 (diff) |
*Backed out changeset 3be01fb200a5
--HG--
branch : trunk
Diffstat (limited to 'dep/ACE_wrappers/ace/SString.cpp')
-rw-r--r-- | dep/ACE_wrappers/ace/SString.cpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/dep/ACE_wrappers/ace/SString.cpp b/dep/ACE_wrappers/ace/SString.cpp index 7a78334547c..9548a4e6f38 100644 --- a/dep/ACE_wrappers/ace/SString.cpp +++ b/dep/ACE_wrappers/ace/SString.cpp @@ -1,4 +1,5 @@ // $Id: SString.cpp 80826 2008-03-04 14:51:23Z wotte $ + #include "ace/Malloc_T.h" #include "ace/OS_Memory.h" #if !defined (ACE_HAS_WINCE) @@ -8,20 +9,26 @@ #include "ace/Auto_Ptr.h" #include "ace/OS_NS_string.h" #include "ace/Numeric_Limits.h" + #if !defined (ACE_LACKS_IOSTREAM_TOTALLY) // FUZZ: disable check_for_streams_include # include "ace/streams.h" #endif /* ! ACE_LACKS_IOSTREAM_TOTALLY */ + #if !defined (__ACE_INLINE__) #include "ace/SString.inl" #endif /* __ACE_INLINE__ */ + ACE_RCSID (ace, SString, "SString.cpp,v 4.61 2001/03/04 00:55:30 brunsch Exp") + // ************************************************************ + ACE_BEGIN_VERSIONED_NAMESPACE_DECL + #if !defined (ACE_LACKS_IOSTREAM_TOTALLY) ACE_OSTREAM_TYPE & operator<< (ACE_OSTREAM_TYPE &os, const ACE_CString &cs) @@ -30,6 +37,7 @@ operator<< (ACE_OSTREAM_TYPE &os, const ACE_CString &cs) os << cs.fast_rep (); return os; } + ACE_OSTREAM_TYPE & operator<< (ACE_OSTREAM_TYPE &os, const ACE_WString &ws) { @@ -43,6 +51,7 @@ operator<< (ACE_OSTREAM_TYPE &os, const ACE_WString &ws) #endif return os; } + ACE_OSTREAM_TYPE & operator<< (ACE_OSTREAM_TYPE &os, const ACE_SString &ss) { @@ -51,7 +60,9 @@ operator<< (ACE_OSTREAM_TYPE &os, const ACE_SString &ss) return os; } #endif /* !ACE_LACKS_IOSTREAM_TOTALLY */ + // ***************************************************************** + char * ACE_NS_WString::char_rep (void) const { @@ -61,17 +72,21 @@ ACE_NS_WString::char_rep (void) const else { char *t = 0; + ACE_NEW_RETURN (t, char[this->len_ + 1], 0); + for (size_type i = 0; i < this->len_; ++i) // Note that this cast may lose data if wide chars are // actually used! t[i] = char (this->rep_[i]); + t[this->len_] = '\0'; return t; } } + ACE_USHORT16 * ACE_NS_WString::ushort_rep (void) const { @@ -81,26 +96,33 @@ ACE_NS_WString::ushort_rep (void) const else { ACE_USHORT16 *t = 0; + ACE_NEW_RETURN (t, ACE_USHORT16[this->len_ + 1], 0); + for (size_type i = 0; i < this->len_; ++i) // Note that this cast may lose data if wide chars are // actually used! t[i] = (ACE_USHORT16)this->rep_[i]; + t[this->len_] = 0; return t; } } + ACE_NS_WString::ACE_NS_WString (const char *s, ACE_Allocator *alloc) : ACE_WString (alloc) { if (s == 0) return; + this->len_ = this->buf_len_ = ACE_OS::strlen (s); + if (this->buf_len_ == 0) return; + ACE_ALLOCATOR (this->rep_, (ACE_WSTRING_TYPE *) this->allocator_->malloc ((this->buf_len_ + 1) * @@ -109,6 +131,7 @@ ACE_NS_WString::ACE_NS_WString (const char *s, for (size_type i = 0; i <= this->buf_len_; ++i) this->rep_[i] = s[i]; } + #if defined (ACE_WSTRING_HAS_USHORT_SUPPORT) ACE_NS_WString::ACE_NS_WString (const ACE_USHORT16 *s, size_type len, @@ -117,9 +140,12 @@ ACE_NS_WString::ACE_NS_WString (const ACE_USHORT16 *s, { if (s == 0) return; + this->buf_len_ = len; + if (this->buf_len_ == 0) return; + ACE_ALLOCATOR (this->rep_, (ACE_WSTRING_TYPE *) this->allocator_->malloc ((this->buf_len_) * @@ -129,10 +155,14 @@ ACE_NS_WString::ACE_NS_WString (const ACE_USHORT16 *s, this->rep_[i] = s[i]; } #endif /* ACE_WSTRING_HAS_USHORT_SUPPORT */ + // ***************************************************************** + ACE_SString::size_type const ACE_SString::npos = ACE_Numeric_Limits<ACE_SString::size_type>::max (); + ACE_ALLOC_HOOK_DEFINE(ACE_SString) + void ACE_SString::dump (void) const { @@ -140,52 +170,69 @@ ACE_SString::dump (void) const ACE_TRACE ("ACE_SString::dump"); #endif /* ACE_HAS_DUMP */ } + // Copy constructor. + ACE_SString::ACE_SString (const ACE_SString &s) : allocator_ (s.allocator_), len_ (s.len_) { ACE_TRACE ("ACE_SString::ACE_SString"); + if (this->allocator_ == 0) this->allocator_ = ACE_Allocator::instance (); + this->rep_ = (char *) this->allocator_->malloc (s.len_ + 1); ACE_OS::memcpy ((void *) this->rep_, (const void *) s.rep_, this->len_); this->rep_[this->len_] = '\0'; } + // Default constructor. + ACE_SString::ACE_SString (ACE_Allocator *alloc) : allocator_ (alloc), len_ (0), rep_ (0) + { ACE_TRACE ("ACE_SString::ACE_SString"); + if (this->allocator_ == 0) this->allocator_ = ACE_Allocator::instance (); + this->len_ = 0; this->rep_ = (char *) this->allocator_->malloc (this->len_ + 1); this->rep_[this->len_] = '\0'; } + // Set the underlying pointer (does not copy memory). + void ACE_SString::rep (char *s) { ACE_TRACE ("ACE_SString::rep"); + this->rep_ = s; + if (s == 0) this->len_ = 0; else this->len_ = ACE_OS::strlen (s); } + // Constructor that actually copies memory. + ACE_SString::ACE_SString (const char *s, ACE_Allocator *alloc) : allocator_ (alloc) { ACE_TRACE ("ACE_SString::ACE_SString"); + if (this->allocator_ == 0) this->allocator_ = ACE_Allocator::instance (); + if (s == 0) { this->len_ = 0; @@ -199,27 +246,34 @@ ACE_SString::ACE_SString (const char *s, ACE_OS::strcpy (this->rep_, s); } } + ACE_SString::ACE_SString (char c, ACE_Allocator *alloc) : allocator_ (alloc) { ACE_TRACE ("ACE_SString::ACE_SString"); + if (this->allocator_ == 0) this->allocator_ = ACE_Allocator::instance (); + this->len_ = 1; this->rep_ = (char *) this->allocator_->malloc (this->len_ + 1); this->rep_[0] = c; this->rep_[this->len_] = '\0'; } + // Constructor that actually copies memory. + ACE_SString::ACE_SString (const char *s, size_type len, ACE_Allocator *alloc) : allocator_ (alloc) { ACE_TRACE ("ACE_SString::ACE_SString"); + if (this->allocator_ == 0) this->allocator_ = ACE_Allocator::instance (); + if (s == 0) { this->len_ = 0; @@ -234,12 +288,15 @@ ACE_SString::ACE_SString (const char *s, this->rep_[len] = '\0'; // Make sure to NUL terminate this! } } + // Assignment operator (does copy memory). + ACE_SString & ACE_SString::operator= (const ACE_SString &s) { ACE_TRACE ("ACE_SString::operator="); // Check for identify. + if (this != &s) { // Only reallocate if we don't have enough space... @@ -251,26 +308,34 @@ ACE_SString::operator= (const ACE_SString &s) this->len_ = s.len_; ACE_OS::strcpy (this->rep_, s.rep_); } + return *this; } + // Return substring. ACE_SString ACE_SString::substring (size_type offset, size_type length) const { size_t count = length; + // case 1. empty string if (len_ == 0) return ACE_SString (); + // case 2. start pos l if (offset >= len_) return ACE_SString (); + // get all remaining bytes if (length == npos || count > (this->len_ - offset)) count = len_ - offset; + return ACE_SString (&rep_[offset], count, this->allocator_); } + // ************************************************************ + ACE_Tokenizer::ACE_Tokenizer (ACE_TCHAR *buffer) : buffer_ (buffer), index_ (0), @@ -278,16 +343,19 @@ ACE_Tokenizer::ACE_Tokenizer (ACE_TCHAR *buffer) delimiter_index_ (0) { } + int ACE_Tokenizer::delimiter (ACE_TCHAR d) { if (delimiter_index_ == MAX_DELIMITERS) return -1; + delimiters_[delimiter_index_].delimiter_ = d; delimiters_[delimiter_index_].replace_ = 0; delimiter_index_++; return 0; } + int ACE_Tokenizer::delimiter_replace (ACE_TCHAR d, ACE_TCHAR replacement) @@ -302,14 +370,17 @@ ACE_Tokenizer::delimiter_replace (ACE_TCHAR d, delimiters_[i].replace_ = 1; return 0; } + if (delimiter_index_ >= MAX_DELIMITERS) return -1; + delimiters_[delimiter_index_].delimiter_ = d; delimiters_[delimiter_index_].replacement_ = replacement; delimiters_[delimiter_index_].replace_ = 1; delimiter_index_++; return 0; } + int ACE_Tokenizer::preserve_designators (ACE_TCHAR start, ACE_TCHAR stop, @@ -317,18 +388,21 @@ ACE_Tokenizer::preserve_designators (ACE_TCHAR start, { if (preserves_index_ == MAX_PRESERVES) return -1; + preserves_[preserves_index_].start_ = start; preserves_[preserves_index_].stop_ = stop; preserves_[preserves_index_].strip_ = strip; preserves_index_++; return 0; } + int ACE_Tokenizer::is_delimiter (ACE_TCHAR d, int &replace, ACE_TCHAR &r) { replace = 0; + for (int x = 0; x < delimiter_index_; x++) if (delimiters_[x].delimiter_ == d) { @@ -339,8 +413,10 @@ ACE_Tokenizer::is_delimiter (ACE_TCHAR d, } return 1; } + return 0; } + int ACE_Tokenizer::is_preserve_designator (ACE_TCHAR start, ACE_TCHAR &stop, @@ -353,8 +429,10 @@ ACE_Tokenizer::is_preserve_designator (ACE_TCHAR start, strip = preserves_[x].strip_; return 1; } + return 0; } + ACE_TCHAR * ACE_Tokenizer::next (void) { @@ -364,9 +442,11 @@ ACE_Tokenizer::next (void) index_ = 0; return 0; } + ACE_TCHAR replacement = 0; int replace; ACE_TCHAR *next_token; + // Skip all leading delimiters. for (;;) { @@ -377,6 +457,7 @@ ACE_Tokenizer::next (void) index_ = 0; return 0; } + if (this->is_delimiter (buffer_[index_], replace, replacement)) @@ -384,9 +465,11 @@ ACE_Tokenizer::next (void) else break; } + // When we reach this point, buffer_[index_] is a non-delimiter and // not EOS - the start of our next_token. next_token = buffer_ + index_; + // A preserved region is it's own token. ACE_TCHAR stop; int strip; @@ -401,9 +484,11 @@ ACE_Tokenizer::next (void) index_ = -1; goto EXIT_LABEL; } + if (buffer_[index_] == stop) break; } + if (strip) { // Skip start preserve designator. @@ -413,13 +498,16 @@ ACE_Tokenizer::next (void) // Increment to the next token. index_++; } + goto EXIT_LABEL; } + // Step through finding the next delimiter or EOS. for (;;) { // Advance pointer. index_++; + // Check for delimiter. if (this->is_delimiter (buffer_[index_], replace, @@ -428,15 +516,18 @@ ACE_Tokenizer::next (void) // Replace the delimiter. if (replace != 0) buffer_[index_] = replacement; + // Move the pointer up and return. index_++; goto EXIT_LABEL; } + // A preserve designator signifies the end of this token. if (this->is_preserve_designator (buffer_[index_], stop, strip)) goto EXIT_LABEL; + // Check for end of string. if (buffer_[index_] == '\0') { @@ -444,13 +535,17 @@ ACE_Tokenizer::next (void) goto EXIT_LABEL; } } + EXIT_LABEL: return next_token; } + // ************************************************************* + #if defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION) template char ACE_String_Base<char>::NULL_String_; template ACE_WSTRING_TYPE ACE_String_Base<ACE_WSTRING_TYPE>::NULL_String_; #endif /* ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION */ + ACE_END_VERSIONED_NAMESPACE_DECL |