(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.44 and 1.51

version 1.44, 2002/07/18 17:06:28 version 1.51, 2002/08/27 01:36:32
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;
 } }
  
   char* String::allocateCString(Uint32 extraBytes) const
   {
       Boolean truncatedCharacters = false;
       return allocateCString(extraBytes, truncatedCharacters);
   }
   
 Char16& String::operator[](Uint32 i) Char16& String::operator[](Uint32 i)
 { {
     if (i > size())     if (i > size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     return _rep->c16a[i];     return _rep->c16a[i];
 } }
Line 265 
Line 272 
 const Char16 String::operator[](Uint32 i) const const Char16 String::operator[](Uint32 i) const
 { {
     if (i > size())     if (i > size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     return _rep->c16a[i];     return _rep->c16a[i];
 } }
Line 279 
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 312 
Line 319 
         size = this->size() - pos;         size = this->size() - pos;
  
     if (pos + size > this->size())     if (pos + size > this->size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     if (size)     if (size)
         _rep->c16a.remove(pos, size);         _rep->c16a.remove(pos, size);
Line 408 
Line 415 
 { {
     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);
     }     }
 } }
Line 454 
Line 457 
     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 494 
Line 466 
     {     {
         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 536 
Line 505 
  
     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 577 
Line 543 
  
 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 718 
Line 680 
     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++)
       {
           Uint16 code = str[i];
   
           if (code > 0 && code <= PEGASUS_MAX_PRINTABLE_CHAR)
 { {
     for (Uint32 i = 0, n = str1.size(); i < n; i++)              os << char(code);
         os << str1[i];          }
           else
           {
               // Print in hex format:
               char buffer[8];
               sprintf(buffer, "\\x%04X", code);
               os << buffer;
           }
       }
  
     return os;     return os;
 } }


Legend:
Removed from v.1.44  
changed lines
  Added in v.1.51

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2