- void SetAt(int n, char ch)
- {
- if (n >= 0 && n < GetLength ())
- m_pStr[n] = ch;
- }
-
- // NOTE: unlike CString, this looses the pointer
- void ReleaseBuffer(int n = -1)
- {
- if (n == -1)
- n = GetLength ();
-
- char* tmp = m_pStr;
- tmp[n] = '\0';
- m_pStr = __StrDup(tmp);
- delete []tmp;
- }
-
- char* GetBufferSetLength(int n)
- {
- if (n < 0)
- n = 0;
-
- char *p = new char[n+1];
- strncpy (p, m_pStr, n);
- p[n] = '\0';
- delete []m_pStr;
- m_pStr = p;
- return m_pStr;
- }
-
- // char& operator *() { return *m_pStr; }
- // char& operator *() const { return *const_cast<Str*>(this)->m_pStr; }
- operator void*() { return m_pStr; }
- operator char*() { return m_pStr; }
- operator const char*(){ return reinterpret_cast<const char*>(m_pStr); }
- operator unsigned char*() { return reinterpret_cast<unsigned char*>(m_pStr); }
- operator const unsigned char*() { return reinterpret_cast<const unsigned char*>(m_pStr); }
- Str& operator =(const Str& rhs)
- {
- if (&rhs != this)
- {
- delete[] m_pStr;
- m_pStr = __StrDup(rhs.m_pStr);
- }
- return *this;
- }
-
- Str& operator =(const char* pStr)
- {
- if (m_pStr != pStr)
- {
- delete[] m_pStr;
- m_pStr = __StrDup(pStr);
- }
- return *this;
- }
-
- Str& operator +=(const char ch)
- {
- int len = GetLength ();
- char *p = new char[len + 1 + 1];
-
- if (m_pStr)
- {
- strcpy(p, m_pStr);
- delete[] m_pStr;
- }
-
- m_pStr = p;
- m_pStr[len] = ch;
- m_pStr[len+1] = '\0';
-
- return *this;
- }
-
- Str& operator +=(const char *pStr)
- {
- if (pStr)
- {
- if (m_pStr)
- {
- char *p = new char[strlen(m_pStr) + strlen(pStr) + 1];
- strcpy(p, m_pStr);
- strcat(p, pStr);
- delete[] m_pStr;
- m_pStr = p;
- }
- else
- {
- m_pStr = __StrDup(pStr);
- }
- }
- return *this;
- }
-
-
- bool operator ==(const Str& rhs) const { return (m_bIgnoreCase) ? stricmp(m_pStr, rhs.m_pStr) == 0 : strcmp(m_pStr, rhs.m_pStr) == 0; }
- bool operator ==(char* pStr) const { return (m_bIgnoreCase) ? stricmp(m_pStr, pStr) == 0 : strcmp(m_pStr, pStr) == 0; }
- bool operator ==(const char* pStr) const { return (m_bIgnoreCase) ? stricmp(m_pStr, pStr) == 0 : strcmp(m_pStr, pStr) == 0; }
- bool operator !=(Str& rhs) const { return (m_bIgnoreCase) ? stricmp(m_pStr, rhs.m_pStr) != 0 : strcmp(m_pStr, rhs.m_pStr) != 0; }
- bool operator !=(char* pStr) const { return (m_bIgnoreCase) ? stricmp(m_pStr, pStr) != 0 : strcmp(m_pStr, pStr) != 0; }
- bool operator !=(const char* pStr) const { return (m_bIgnoreCase) ? stricmp(m_pStr, pStr) != 0 : strcmp(m_pStr, pStr) != 0; }
- bool operator <(const Str& rhs) const { return (m_bIgnoreCase) ? stricmp(m_pStr, rhs.m_pStr) < 0 : strcmp(m_pStr, rhs.m_pStr) < 0; }
- bool operator <(char* pStr) const { return (m_bIgnoreCase) ? stricmp(m_pStr, pStr) < 0 : strcmp(m_pStr, pStr) < 0; }
- bool operator <(const char* pStr) const { return (m_bIgnoreCase) ? stricmp(m_pStr, pStr) < 0 : strcmp(m_pStr, pStr) < 0; }
- bool operator >(const Str& rhs) const { return (m_bIgnoreCase) ? stricmp(m_pStr, rhs.m_pStr) > 0 : strcmp(m_pStr, rhs.m_pStr) > 0; }
- bool operator >(char* pStr) const { return (m_bIgnoreCase) ? stricmp(m_pStr, pStr) > 0 : strcmp(m_pStr, pStr) > 0; }
- bool operator >(const char* pStr) const { return (m_bIgnoreCase) ? stricmp(m_pStr, pStr) > 0 : strcmp(m_pStr, pStr) > 0; }
- char& operator [](int nIndex) { return m_pStr[nIndex]; }
- char& operator [](int nIndex) const { return m_pStr[nIndex]; }
- const char GetAt (int nIndex) { return m_pStr[nIndex]; }
+void SetAt( std::size_t n, char ch ){
+ if ( n < GetLength() ) {
+ m_pStr[n] = ch;
+ }
+}
+
+// NOTE: unlike CString, this looses the pointer
+void ReleaseBuffer( std::size_t n ){
+ char* tmp = m_pStr;
+ tmp[n] = '\0';
+ m_pStr = __StrDup( tmp );
+ delete []tmp;
+}
+void ReleaseBuffer(){
+ ReleaseBuffer( GetLength() );
+}
+
+char* GetBufferSetLength( std::size_t n ){
+ char *p = new char[n + 1];
+ strncpy( p, m_pStr, n );
+ p[n] = '\0';
+ delete []m_pStr;
+ m_pStr = p;
+ return m_pStr;
+}
+
+// char& operator *() { return *m_pStr; }
+// char& operator *() const { return *const_cast<Str*>(this)->m_pStr; }
+operator void*() {
+ return m_pStr;
+}
+operator char*() {
+ return m_pStr;
+}
+operator const char*() const { return reinterpret_cast<const char*>( m_pStr ); }
+operator unsigned char*() {
+ return reinterpret_cast<unsigned char*>( m_pStr );
+}
+operator const unsigned char*() const { return reinterpret_cast<const unsigned char*>( m_pStr ); }
+Str& operator =( const Str& rhs ){
+ if ( &rhs != this ) {
+ delete[] m_pStr;
+ m_pStr = __StrDup( rhs.m_pStr );
+ }
+ return *this;
+}
+
+Str& operator =( const char* pStr ){
+ if ( m_pStr != pStr ) {
+ delete[] m_pStr;
+ m_pStr = __StrDup( pStr );
+ }
+ return *this;
+}
+
+Str& operator +=( const char ch ){
+ std::size_t len = GetLength();
+ char *p = new char[len + 1 + 1];
+
+ if ( m_pStr ) {
+ strcpy( p, m_pStr );
+ delete[] m_pStr;
+ }
+
+ m_pStr = p;
+ m_pStr[len] = ch;
+ m_pStr[len + 1] = '\0';
+
+ return *this;
+}
+
+Str& operator +=( const char *pStr ){
+ if ( pStr ) {
+ if ( m_pStr ) {
+ char *p = new char[strlen( m_pStr ) + strlen( pStr ) + 1];
+ strcpy( p, m_pStr );
+ strcat( p, pStr );
+ delete[] m_pStr;
+ m_pStr = p;
+ }
+ else
+ {
+ m_pStr = __StrDup( pStr );
+ }
+ }
+ return *this;
+}
+
+
+bool operator ==( const Str& rhs ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, rhs.m_pStr ) == 0 : strcmp( m_pStr, rhs.m_pStr ) == 0; }
+bool operator ==( char* pStr ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, pStr ) == 0 : strcmp( m_pStr, pStr ) == 0; }
+bool operator ==( const char* pStr ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, pStr ) == 0 : strcmp( m_pStr, pStr ) == 0; }
+bool operator !=( Str& rhs ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, rhs.m_pStr ) != 0 : strcmp( m_pStr, rhs.m_pStr ) != 0; }
+bool operator !=( char* pStr ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, pStr ) != 0 : strcmp( m_pStr, pStr ) != 0; }
+bool operator !=( const char* pStr ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, pStr ) != 0 : strcmp( m_pStr, pStr ) != 0; }
+bool operator <( const Str& rhs ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, rhs.m_pStr ) < 0 : strcmp( m_pStr, rhs.m_pStr ) < 0; }
+bool operator <( char* pStr ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, pStr ) < 0 : strcmp( m_pStr, pStr ) < 0; }
+bool operator <( const char* pStr ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, pStr ) < 0 : strcmp( m_pStr, pStr ) < 0; }
+bool operator >( const Str& rhs ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, rhs.m_pStr ) > 0 : strcmp( m_pStr, rhs.m_pStr ) > 0; }
+bool operator >( char* pStr ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, pStr ) > 0 : strcmp( m_pStr, pStr ) > 0; }
+bool operator >( const char* pStr ) const { return ( m_bIgnoreCase ) ? stricmp( m_pStr, pStr ) > 0 : strcmp( m_pStr, pStr ) > 0; }
+char& operator []( std::size_t nIndex ) { return m_pStr[nIndex]; }
+const char& operator []( std::size_t nIndex ) const { return m_pStr[nIndex]; }
+char GetAt( std::size_t nIndex ) { return m_pStr[nIndex]; }