(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.20 and 1.34

version 1.20, 2001/05/24 00:48:37 version 1.34, 2002/04/18 23:33:17
Line 1 
Line 1 
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000 The Open Group, BMC Software, Tivoli Systems, IBM  // Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a  // Permission is hereby granted, free of charge, to any person obtaining a copy
 // copy of this software and associated documentation files (the "Software"),  // of this software and associated documentation files (the "Software"), to
 // to deal in the Software without restriction, including without limitation  // deal in the Software without restriction, including without limitation the
 // the rights to use, copy, modify, merge, publish, distribute, sublicense,  // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 // and/or sell copies of the Software, and to permit persons to whom the  // sell copies of the Software, and to permit persons to whom the Software is
 // Software is furnished to do so, subject to the following conditions:  // furnished to do so, subject to the following conditions:
 // //
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR  // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL  // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER  // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING  // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER  // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 // DEALINGS IN THE SOFTWARE.  // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
   // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 // //
 //============================================================================== //==============================================================================
 // //
Line 32 
Line 33 
 #include "String.h" #include "String.h"
 #include <iostream> #include <iostream>
  
   PEGASUS_USING_STD;
   
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
 #define PEGASUS_ARRAY_T String #define PEGASUS_ARRAY_T String
Line 40 
Line 43 
  
 const String String::EMPTY; const String String::EMPTY;
  
   #if 0    // Apparently dead code
   static inline void _SkipWhitespace(const Char16*& p)
   {
       while (*p && isspace(*p))
           p++;
   }
   #endif
   
 inline Uint32 StrLen(const char* str) inline Uint32 StrLen(const char* str)
 { {
     if (!str)     if (!str)
Line 98 
Line 109 
  
 String::String(const char* str, Uint32 n_) String::String(const char* str, Uint32 n_)
 { {
     Uint32 n = _min(strlen(str), n_);      Uint32 n = _pegasusMin(strlen(str), n_);
     reserve(n + 1);     reserve(n + 1);
  
     while (n--)     while (n--)
Line 117 
Line 128 
 String& String::assign(const Char16* str, Uint32 n) String& String::assign(const Char16* str, Uint32 n)
 { {
     _rep.clear();     _rep.clear();
     Uint32 m = _min(StrLen(str), n);      Uint32 m = _pegasusMin(StrLen(str), n);
     _rep.append(str, m);     _rep.append(str, m);
     _rep.append('\0');     _rep.append('\0');
     return *this;     return *this;
Line 141 
Line 152 
 { {
     _rep.clear();     _rep.clear();
  
     Uint32 n = _min(strlen(x), n_);      Uint32 n = _pegasusMin(strlen(x), n_);
     _rep.reserve(n + 1);     _rep.reserve(n + 1);
  
     while (n--)     while (n--)
Line 179 
Line 190 
     if (!str)     if (!str)
         throw NullPointer();         throw NullPointer();
  
     Uint32 n = _min(size(), length);      Uint32 n = _pegasusMin(size(), length);
  
     char* p = str + strlen(str);     char* p = str + strlen(str);
     const Char16* q = getData();     const Char16* q = getData();
Line 214 
Line 225 
  
 String& String::append(const Char16* str, Uint32 n) String& String::append(const Char16* str, Uint32 n)
 { {
     Uint32 m = _min(StrLen(str), n);      Uint32 m = _pegasusMin(StrLen(str), n);
     _rep.reserve(_rep.size() + m);     _rep.reserve(_rep.size() + m);
     _rep.remove(_rep.size() - 1);     _rep.remove(_rep.size() - 1);
     _rep.append(str, m);     _rep.append(str, m);
Line 303 
Line 314 
  
     while (n--)     while (n--)
     {     {
   #ifdef PEGASUS_HAS_EBCDIC
           if (*p <= 255 && *q <= 255)
   #else
         if (*p <= 127 && *q <= 127)         if (*p <= 127 && *q <= 127)
   #endif
         {         {
             if (tolower(*p++) != tolower(*q++))             if (tolower(*p++) != tolower(*q++))
                 return false;                 return false;
Line 341 
Line 356 
     return PEG_NOT_FOUND;     return PEG_NOT_FOUND;
 } }
  
   Uint32 String::find(Uint32 pos, Char16 c) const
   {
       const Char16* data = getData();
   
       for (Uint32 i = pos, n = size(); i < n; i++)
       {
           if (data[i] == c)
               return i;
       }
   
       return PEG_NOT_FOUND;
   }
   
 Uint32 String::find(const String& s) const Uint32 String::find(const String& s) const
 { {
     const Char16* pSubStr = s.getData();     const Char16* pSubStr = s.getData();
Line 348 
Line 376 
     Uint32 subStrLen = s.size();     Uint32 subStrLen = s.size();
     Uint32 strLen = size();     Uint32 strLen = size();
  
       if (subStrLen > strLen)
       {
           return PEG_NOT_FOUND;
       }
   
     // loop to find first char match     // loop to find first char match
     Uint32 loc = 0;     Uint32 loc = 0;
     for( ; loc <= (strLen-subStrLen); loc++)     for( ; loc <= (strLen-subStrLen); loc++)
Line 369 
Line 402 
     return PEG_NOT_FOUND;     return PEG_NOT_FOUND;
 } }
  
 // ATTN:KS 5 apr 2000 Need to add the Char16* version.  
 Uint32 String::find(const char* s) const Uint32 String::find(const char* s) const
 { {
     return find(String(s));     return find(String(s));
 } }
  
   Uint32 String::find(const Char16* s) const
   {
       return find(String(s));
   }
   
 Uint32 String::reverseFind(Char16 c) const Uint32 String::reverseFind(Char16 c) const
 { {
     const Char16* first = getData();     const Char16* first = getData();
Line 393 
Line 430 
 { {
     for (Char16* p = &_rep[0]; *p; p++)     for (Char16* p = &_rep[0]; *p; p++)
     {     {
   #ifdef PEGASUS_HAS_EBCDIC
           if (*p <= 255)
   #else
         if (*p <= 127)         if (*p <= 127)
   #endif
             *p = tolower(*p);             *p = tolower(*p);
     }     }
 } }
Line 425 
Line 466 
     return 0;     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;
   }
   
 PEGASUS_STD(ostream)& operator<<(PEGASUS_STD(ostream)& os, const String& x) PEGASUS_STD(ostream)& operator<<(PEGASUS_STD(ostream)& os, const String& x)
 { {
     for (Uint32 i = 0, n = x.size(); i < n; i++)     for (Uint32 i = 0, n = x.size(); i < n; i++)
Line 447 
Line 506 
     {     {
         Char16 c = tmp[i];         Char16 c = tmp[i];
  
   #ifdef PEGASUS_HAS_EBCDIC
           if (c <= 255)
   #else
         if (c <= 127)         if (c <= 127)
   #endif
             tmp[i] = tolower(c);             tmp[i] = tolower(c);
     }     }
  
Line 514 
Line 577 
     _rep.append('\0');     _rep.append('\0');
 } }
  
   void String::print() const
   {
       cout << *this << endl;
   }
   
 void String::reserve(Uint32 capacity) void String::reserve(Uint32 capacity)
 { {
     _rep.reserve(capacity + 1);     _rep.reserve(capacity + 1);


Legend:
Removed from v.1.20  
changed lines
  Added in v.1.34

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2