(file) Return to String.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/String.cpp between version 1.43 and 1.53

version 1.43, 2002/07/17 18:52:23 version 1.53, 2002/08/27 23:38:44
Line 31 
Line 31 
 #include <cctype> #include <cctype>
 #include "String.h" #include "String.h"
 #include "Array.h" #include "Array.h"
 #include "Exception.h"  #include "InternalException.h"
 #include <iostream> #include <iostream>
  
 PEGASUS_USING_STD; PEGASUS_USING_STD;
Line 191 
Line 191 
     _rep->c16a.clear();     _rep->c16a.clear();
  
     Uint32 n = strlen(str) + 1;     Uint32 n = strlen(str) + 1;
     _rep->c16a.reserve(n);      _rep->c16a.reserveCapacity(n);
  
     while (n--)     while (n--)
         _rep->c16a.append(*str++);         _rep->c16a.append(*str++);
Line 204 
Line 204 
     _rep->c16a.clear();     _rep->c16a.clear();
  
     Uint32 _n = _strnlen(str, n);     Uint32 _n = _strnlen(str, n);
     _rep->c16a.reserve(_n + 1);      _rep->c16a.reserveCapacity(_n + 1);
  
     while (_n--)     while (_n--)
         _rep->c16a.append(*str++);         _rep->c16a.append(*str++);
Line 222 
Line 222 
  
 void String::reserveCapacity(Uint32 capacity) void String::reserveCapacity(Uint32 capacity)
 { {
     _rep->c16a.reserve(capacity + 1);      _rep->c16a.reserveCapacity(capacity + 1);
 } }
  
 Uint32 String::size() const Uint32 String::size() const
Line 235 
Line 235 
     return _rep->c16a.getData();     return _rep->c16a.getData();
 } }
  
 char* String::allocateCString(Uint32 extraBytes, Boolean noThrow) const  char* String::allocateCString(Uint32 extraBytes, Boolean& truncatedCharacters) const
 { {
       truncatedCharacters = false;
     Uint32 n = size() + 1;     Uint32 n = size() + 1;
     char* str = new char[n + extraBytes];     char* str = new char[n + extraBytes];
     char* p = str;     char* p = str;
Line 247 
Line 248 
         Uint16 c = *q++;         Uint16 c = *q++;
         *p++ = char(c);         *p++ = char(c);
  
         if ((c & 0xff00) && !noThrow)          if (c & 0xff00)
             throw TruncatedCharacter();              truncatedCharacters = true;
     }     }
  
     return str;     return str;
 } }
  
 void String::appendToCString(  char* String::allocateCString(Uint32 extraBytes) const
     char* str,  
     Uint32 length,  
     Boolean noThrow) const  
 { {
     if (!str)      Boolean truncatedCharacters = false;
         throw NullPointer();      return allocateCString(extraBytes, truncatedCharacters);
   
     Uint32 n = (size() < length)? size() : length;  
   
     char* p = str + strlen(str);  
     const Char16* q = getData();  
   
     for (Uint32 i = 0; i < n; i++)  
     {  
         Uint16 c = *q++;  
         *p++ = char(c);  
   
         if ((c & 0xff00) && !noThrow)  
             throw TruncatedCharacter();  
     }  
   
     *p = '\0';  
 } }
  
 Char16& String::operator[](Uint32 i)  Char16& String::operator[](Uint32 index)
 { {
     if (i > size())      if (index > size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     return _rep->c16a[i];      return _rep->c16a[index];
 } }
  
 const Char16 String::operator[](Uint32 i) const  const Char16 String::operator[](Uint32 index) const
 { {
     if (i > size())      if (index > size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     return _rep->c16a[i];      return _rep->c16a[index];
 } }
  
 String& String::append(const Char16& c) String& String::append(const Char16& c)
Line 304 
Line 286 
 String& String::append(const Char16* str, Uint32 n) String& String::append(const Char16* str, Uint32 n)
 { {
     Uint32 m = _strnlen(str, n);     Uint32 m = _strnlen(str, n);
     _rep->c16a.reserve(_rep->c16a.size() + m);      _rep->c16a.reserveCapacity(_rep->c16a.size() + m);
     _rep->c16a.remove(_rep->c16a.size() - 1);     _rep->c16a.remove(_rep->c16a.size() - 1);
     _rep->c16a.append(str, m);     _rep->c16a.append(str, m);
     _rep->c16a.append('\0');     _rep->c16a.append('\0');
Line 316 
Line 298 
     return append(str.getData(), str.size());     return append(str.getData(), str.size());
 } }
  
 String& String::operator+=(const String& str)  void String::remove(Uint32 index, Uint32 size)
 {  
     return append(str);  
 }  
   
 String& String::operator+=(Char16 c)  
 {  
     return append(c);  
 }  
   
 String& String::operator+=(char c)  
 {  
     return append(Char16(c));  
 }  
   
 void String::remove(Uint32 pos, Uint32 size)  
 { {
     if (size == PEG_NOT_FOUND)     if (size == PEG_NOT_FOUND)
         size = this->size() - pos;          size = this->size() - index;
  
     if (pos + size > this->size())      if (index + size > this->size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     if (size)     if (size)
         _rep->c16a.remove(pos, size);          _rep->c16a.remove(index, size);
 } }
  
 String String::subString(Uint32 pos, Uint32 length) const  String String::subString(Uint32 index, Uint32 length) const
 { {
     if (pos < size())      if (index < size())
     {     {
         if (length == PEG_NOT_FOUND)         if (length == PEG_NOT_FOUND)
             length = size() - pos;              length = size() - index;
  
         return String(getData() + pos, length);          return String(getData() + index, length);
     }     }
     else     else
         return String();         return String();
Line 369 
Line 336 
     return PEG_NOT_FOUND;     return PEG_NOT_FOUND;
 } }
  
 Uint32 String::find(Uint32 pos, Char16 c) const  Uint32 String::find(Uint32 index, Char16 c) const
 { {
     const Char16* data = getData();     const Char16* data = getData();
  
     for (Uint32 i = pos, n = size(); i < n; i++)      for (Uint32 i = index, n = size(); i < n; i++)
     {     {
         if (data[i] == c)         if (data[i] == c)
             return i;             return i;
Line 433 
Line 400 
 { {
     for (Char16* p = &_rep->c16a[0]; *p; p++)     for (Char16* p = &_rep->c16a[0]; *p; p++)
     {     {
 #ifdef PEGASUS_HAS_EBCDIC          if (*p <= PEGASUS_MAX_PRINTABLE_CHAR)
         if (*p <= 255)  
 #else  
         if (*p <= 127)  
 #endif  
             *p = tolower(*p);             *p = tolower(*p);
     }     }
 } }
  
 void String::toLower(char* str)  
 {  
     while (*str)  
         tolower(*str++);  
 }  
   
 int String::compare(const String& s1, const String& s2, Uint32 n) int String::compare(const String& s1, const String& s2, Uint32 n)
 { {
     const Char16* s1c16 = s1.getData();     const Char16* s1c16 = s1.getData();
Line 485 
Line 442 
     return 0;     return 0;
 } }
  
 int String::compareNoCase(const char* s1, const char* s2, Uint32 n)  
 {  
     while (n--)  
     {  
         int r = tolower(*s1++) - tolower(*s2++);  
   
         if (r)  
             return r;  
     }  
   
     return 0;  
 }  
   
 int String::compareNoCase(const char* s1, const char* s2)  
 {  
     while (*s1 && *s2)  
     {  
         int r = tolower(*s1++) - tolower(*s2++);  
   
         if (r)  
             return r;  
     }  
   
     if (*s2)  
         return -1;  
     else if (*s1)  
         return 1;  
   
     return 0;  
 }  
   
 int String::compareNoCase(const String& s1, const String& s2) int String::compareNoCase(const String& s1, const String& s2)
 { {
     const Char16* _s1 = s1.getData();     const Char16* _s1 = s1.getData();
Line 525 
Line 451 
     {     {
         int r;         int r;
  
 #ifdef PEGASUS_HAS_EBCDIC          if (*_s1 <= PEGASUS_MAX_PRINTABLE_CHAR &&
         if (*_s1 <= 255 && *_s2 <= 255)              *_s2 <= PEGASUS_MAX_PRINTABLE_CHAR)
 #else  
         if (*_s1 <= 127 && *_s2 <= 127)  
 #endif  
         {         {
             r = tolower(*_s1++) - tolower(*_s2++);             r = tolower(*_s1++) - tolower(*_s2++);
         }         }
Line 567 
Line 490 
  
     while (n--)     while (n--)
     {     {
 #ifdef PEGASUS_HAS_EBCDIC          if (*p <= PEGASUS_MAX_PRINTABLE_CHAR &&
         if (*p <= 255 && *q <= 255)              *q <= PEGASUS_MAX_PRINTABLE_CHAR)
 #else  
         if (*p <= 127 && *q <= 127)  
 #endif  
         {         {
             if (tolower(*p++) != tolower(*q++))             if (tolower(*p++) != tolower(*q++))
                 return false;                 return false;
Line 608 
Line 528 
  
 inline Uint16 _ToLower(Uint16 ch) inline Uint16 _ToLower(Uint16 ch)
 { {
 #ifdef PEGASUS_HAS_EBCDIC      return ch <= PEGASUS_MAX_PRINTABLE_CHAR ? tolower(char(ch)) : ch;
     return ch <= 255 ? tolower(char(ch)) : ch;  
 #else  
     return ch <= 127 ? tolower(char(ch)) : ch;  
 #endif  
 } }
  
 inline Boolean _Equal(MatchChar ch1, MatchChar ch2, int nocase) inline Boolean _Equal(MatchChar ch1, MatchChar ch2, int nocase)
Line 749 
Line 665 
     return !String::equal(str1, str2);     return !String::equal(str1, str2);
 } }
  
 PEGASUS_STD(ostream)& operator<<(PEGASUS_STD(ostream)& os, const String& str1)  PEGASUS_STD(ostream)& operator<<(PEGASUS_STD(ostream)& os, const String& str)
   {
       for (Uint32 i = 0, n = str.size(); i < n; i++)
 { {
     for (Uint32 i = 0, n = str1.size(); i < n; i++)          Uint16 code = str[i];
         os << str1[i];  
           if (code > 0 && code <= PEGASUS_MAX_PRINTABLE_CHAR)
           {
               os << char(code);
           }
           else
           {
               // Print in hex format:
               char buffer[8];
               sprintf(buffer, "\\x%04X", code);
               os << buffer;
           }
       }
  
     return os;     return os;
 } }


Legend:
Removed from v.1.43  
changed lines
  Added in v.1.53

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2