Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

ascstring.cpp

Go to the documentation of this file.
00001 
00002 #include "ascstring.h"
00003 
00036 ASCString& ASCString::toLower ( )
00037 {
00038 //    auto_ptr< charT > l_autopBuf ( new charT [ length () + sizeof ( charT ) ] );
00039 //    charT* l_pBuf = l_autopBuf.get();
00040     charT* l_pBuf = new charT [ length () + sizeof ( charT ) ];
00041 
00042     ASCStringHelpers::_Strcpy ( l_pBuf, c_str () );
00043     ASCStringHelpers::_Strlwr ( l_pBuf );
00044     assign  ( l_pBuf );
00045 
00046     delete[] l_pBuf;
00047     return *this;
00048 }
00049 
00055 ASCString& ASCString::toUpper ( )
00056 {
00057 //    auto_ptr< charT > l_autopBuf ( new charT [ length () + sizeof ( charT ) ] );
00058     charT* l_pBuf = new charT [ length () + sizeof ( charT ) ];
00059 
00060     ASCStringHelpers::_Strcpy ( l_pBuf, c_str () );
00061     ASCStringHelpers::_Strupr ( l_pBuf );
00062     assign  ( l_pBuf );
00063 
00064     delete[] l_pBuf;
00065     return *this;
00066 }
00067 
00078 ASCString& ASCString::format ( const charT* pFormat, ... )
00079 {
00080     std::va_list arg_ptr;
00081     va_start ( arg_ptr, pFormat );
00082 
00083     vaformat( pFormat, arg_ptr );
00084 
00085     va_end ( arg_ptr );
00086 
00087     return *this;
00088 }
00089 
00090 
00091 ASCString&  ASCString::vaformat     ( const charT* pFormat, va_list ap )
00092 {
00093     int  l_iNbChar = 10000;
00094     bool l_bIsDone = false;
00095 
00096     while ( l_bIsDone == false )
00097     {
00098         charT* l_pBuf = new charT [ l_iNbChar ];
00099 
00100         int l_iNbCharWritten = ASCStringHelpers::_Vsnprintf ( l_pBuf, l_iNbChar, pFormat, ap );
00101 
00102         if ( l_iNbCharWritten != -1 )
00103         {
00104             // ok, l_pBuf was large enough to hold the whole formated string
00105             assign ( l_pBuf );
00106             l_bIsDone = true;
00107         }
00108         else
00109         {
00110             // l_pBuf is not large enough to hold the whole formated string.
00111             // Double the number of characters l_pBuf can hold and retry 
00112             // to format the string.
00113             l_iNbChar *= 2;
00114         }
00115 
00116         delete [] l_pBuf;
00117     };
00118     return *this;
00119 }
00120 
00121 
00137 void ASCString::printf ( )
00138 {
00139     ASCStringHelpers::_Printf ( c_str () );
00140 }
00141 
00142 
00146 bool ASCString::endswith( const ASCString& s ) const
00147 {
00148    size_type p =  rfind( s );
00149    if ( p != npos ) 
00150       return p == length() - s.length();
00151    else   
00152       return false;
00153 }
00154 
00155 
00156 
00167 ASCString copytoLower ( const ASCString& String )
00168 {
00169     ASCString l_TempString ( String );
00170     l_TempString.toLower ();
00171 
00172     return l_TempString;
00173 }
00174 
00185 ASCString copytoUpper ( const ASCString& String )
00186 {
00187     ASCString l_TempString ( String );
00188     l_TempString.toUpper ();
00189 
00190     return l_TempString;
00191 }
00192 
00193 ASCString ASCString::toString(int i )
00194 {
00195    ASCString s;
00196    s.format("%d",i);
00197    return s;
00198 }
00199 
00200 #ifdef SIZE_T_not_identical_to_INT
00201 ASCString ASCString::toString( size_t i )
00202 {
00203    ASCString s;
00204    s.format("%d",i);
00205    return s;
00206 }
00207 #endif 
00208 
00209 
00210 ASCString ASCString::toString(double d )
00211 {
00212    ASCString s;
00213    s.format("%f",d);
00214    return s;
00215 }
00216 
00217 const ASCString operator+ ( const ASCString& s1, const ASCString& s2 )
00218 {
00219    ASCString s = s1;
00220    s += s2;
00221    return s;
00222 }
00223 
00224 const ASCString operator+ ( const char* s1, const ASCString& s2 )
00225 {
00226    ASCString s = s1;
00227    s += s2;
00228    return s;
00229 }
00230 
00231 ASCString& ASCString::replaceAll( const ASCString& old, const ASCString& newString)
00232 {
00233    ASCString::size_type it;
00234    while ( (it = find(old)) != ASCString::npos)
00235       replace( it, old.length(), newString);
00236    
00237    return *this;
00238 }
00239 
00240 ASCString& ASCString::replaceAll_ci( const ASCString& old, const ASCString& newString)
00241 {
00242    ASCString::size_type it ;
00243    ASCString old2 = copytoLower(old);
00244    do {
00245       ASCString tmp = copytoLower( *this );
00246 
00247       it = tmp.find( old2 );
00248       if ( it != npos )
00249          replace( it, old.length(), newString);
00250       
00251    }  while ( it != npos);
00252    
00253    return *this;
00254 }
00255 
00256 

Generated on Tue Jun 24 01:27:34 2008 for Advanced Strategic Command by  doxygen 1.4.2