X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cbb003b1053e30ea93a5cb956c360a4a39c35622..11e3c6ef36393fb5863ea2f9601d8facd73acb12:/include/wx/ustring.h diff --git a/include/wx/ustring.h b/include/wx/ustring.h index 05cf803879..5b0d377e74 100644 --- a/include/wx/ustring.h +++ b/include/wx/ustring.h @@ -3,12 +3,12 @@ // Purpose: 32-bit string (UCS-4) // Author: Robert Roebling // Copyright: (c) Robert Roebling -// RCS-ID: $Id: tab.h 37400 2006-02-09 00:28:34Z VZ $ +// RCS-ID: $Id$ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_USTRING_H_BASE_ -#define _WX_USTRING_H_BASE_ +#ifndef _WX_USTRING_H_ +#define _WX_USTRING_H_ #include "wx/defs.h" #include "wx/string.h" @@ -17,16 +17,27 @@ #if SIZEOF_WCHAR_T == 2 typedef wxWCharBuffer wxU16CharBuffer; +typedef wxScopedWCharBuffer wxScopedU16CharBuffer; #else typedef wxCharTypeBuffer wxU16CharBuffer; +typedef wxScopedCharTypeBuffer wxScopedU16CharBuffer; #endif #if SIZEOF_WCHAR_T == 4 typedef wxWCharBuffer wxU32CharBuffer; +typedef wxScopedWCharBuffer wxScopedU32CharBuffer; #else typedef wxCharTypeBuffer wxU32CharBuffer; +typedef wxScopedCharTypeBuffer wxScopedU32CharBuffer; #endif +#ifdef __VISUALC__ + // "non dll-interface class 'std::basic_string' used as base + // interface for dll-interface class 'wxString'" -- this is OK in our case + // (and warning is unavoidable anyhow) + #pragma warning(push) + #pragma warning(disable:4275) +#endif class WXDLLIMPEXP_BASE wxUString: public std::basic_string { @@ -34,16 +45,15 @@ public: wxUString() { } wxUString( const wxChar32 *str ) { assign(str); } - wxUString( const wxUString &str ) { assign(str); } - wxUString( const wxU32CharBuffer &buf ) { assign(buf); } + wxUString( const wxScopedU32CharBuffer &buf ) { assign(buf); } wxUString( const char *str ) { assign(str); } - wxUString( const wxCharBuffer &buf ) { assign(buf); } + wxUString( const wxScopedCharBuffer &buf ) { assign(buf); } wxUString( const char *str, const wxMBConv &conv ) { assign(str,conv); } - wxUString( const wxCharBuffer &buf, const wxMBConv &conv ) { assign(buf,conv); } + wxUString( const wxScopedCharBuffer &buf, const wxMBConv &conv ) { assign(buf,conv); } wxUString( const wxChar16 *str ) { assign(str); } - wxUString( const wxU16CharBuffer &buf ) { assign(buf); } + wxUString( const wxScopedU16CharBuffer &buf ) { assign(buf); } wxUString( const wxCStrData *cstr ) { assign(cstr); } wxUString( const wxString &str ) { assign(str); } @@ -116,11 +126,11 @@ public: // conversions - wxCharBuffer utf8_str() const; - wxU16CharBuffer utf16_str() const; + wxScopedCharBuffer utf8_str() const; + wxScopedU16CharBuffer utf16_str() const; #if SIZEOF_WCHAR_T == 2 - wxWCharBuffer wc_str() const + wxScopedWCharBuffer wc_str() const { return utf16_str(); } @@ -145,13 +155,13 @@ public: } #if wxUSE_UNICODE_UTF8 - wxCharBuffer wx_str() + wxScopedCharBuffer wx_str() { return utf8_str(); } #else #if SIZEOF_WCHAR_T == 2 - wxWCharBuffer wx_str() + wxScopedWCharBuffer wx_str() { return utf16_str(); } @@ -165,43 +175,69 @@ public: // assign - inline wxUString &assign( const wxChar32* str ) + wxUString &assign( const wxChar32* str ) { std::basic_string *base = this; return (wxUString &) base->assign( str ); } - inline wxUString &assign( const wxChar32* str, size_type n ) + wxUString &assign( const wxChar32* str, size_type n ) { std::basic_string *base = this; return (wxUString &) base->assign( str, n ); } - inline wxUString &assign( const wxUString &str ) + wxUString &assign( const wxUString &str ) { std::basic_string *base = this; return (wxUString &) base->assign( str ); } - inline wxUString &assign( const wxUString &str, size_type pos, size_type n ) + wxUString &assign( const wxUString &str, size_type pos, size_type n ) { std::basic_string *base = this; return (wxUString &) base->assign( str, pos, n ); } - inline wxUString &assign( wxChar32 ch ) - { - std::basic_string *base = this; - return (wxUString &) base->assign( (size_type) 1, ch ); - } + // FIXME-VC6: VC 6.0 stl does not support all types of assign functions + #ifdef __VISUALC6__ + wxUString &assign( wxChar32 ch ) + { + wxChar32 chh[1]; + chh[0] = ch; + std::basic_string *base = this; + return (wxUString &)base->assign(chh); + } - inline wxUString &assign( size_type n, wxChar32 ch ) - { - std::basic_string *base = this; - return (wxUString &) base->assign( n, ch ); - } + wxUString &assign( size_type n, wxChar32 ch ) + { + wxU32CharBuffer buffer(n); + wxChar32 *p = buffer.data(); + size_type i; + for (i = 0; i < n; i++) + { + *p = ch; + p++; + } + + std::basic_string *base = this; + return (wxUString &)base->assign(buffer.data()); + } + #else + wxUString &assign( wxChar32 ch ) + { + std::basic_string *base = this; + return (wxUString &) base->assign( (size_type) 1, ch ); + } - wxUString &assign( const wxU32CharBuffer &buf ) + wxUString &assign( size_type n, wxChar32 ch ) + { + std::basic_string *base = this; + return (wxUString &) base->assign( n, ch ); + } + #endif // __VISUALC6__ + + wxUString &assign( const wxScopedU32CharBuffer &buf ) { return assign( buf.data() ); } @@ -211,7 +247,7 @@ public: return assignFromCString( str ); } - wxUString &assign( const wxCharBuffer &buf ) + wxUString &assign( const wxScopedCharBuffer &buf ) { return assignFromCString( buf.data() ); } @@ -221,7 +257,7 @@ public: return assignFromCString( str, conv ); } - wxUString &assign( const wxCharBuffer &buf, const wxMBConv &conv ) + wxUString &assign( const wxScopedCharBuffer &buf, const wxMBConv &conv ) { return assignFromCString( buf.data(), conv ); } @@ -231,7 +267,7 @@ public: return assignFromUTF16( str ); } - wxUString &assign( const wxU16CharBuffer &buf ) + wxUString &assign( const wxScopedU16CharBuffer &buf ) { return assignFromUTF16( buf.data() ); } @@ -302,57 +338,75 @@ public: wxUString &assign( wxUniChar ch ) { - return assign( (const wxChar32) ch.GetValue() ); + return assign( (wxChar32) ch.GetValue() ); } wxUString &assign( size_type n, wxUniChar ch ) { - return assign( n, (const wxChar32) ch.GetValue() ); + return assign( n, (wxChar32) ch.GetValue() ); } wxUString &assign( wxUniCharRef ch ) { - return assign( (const wxChar32) ch.GetValue() ); + return assign( (wxChar32) ch.GetValue() ); } wxUString &assign( size_type n, wxUniCharRef ch ) { - return assign( n, (const wxChar32) ch.GetValue() ); + return assign( n, (wxChar32) ch.GetValue() ); } // append [STL overload] - inline wxUString &append( const wxUString &s ) + wxUString &append( const wxUString &s ) { std::basic_string *base = this; return (wxUString &) base->append( s ); } - inline wxUString &append( const wxUString &s, size_type pos, size_type n ) + wxUString &append( const wxUString &s, size_type pos, size_type n ) { std::basic_string *base = this; return (wxUString &) base->append( s, pos, n ); } - inline wxUString &append( const wxChar32* s ) + wxUString &append( const wxChar32* s ) { std::basic_string *base = this; return (wxUString &) base->append( s ); } - inline wxUString &append( const wxChar32* s, size_type n ) + wxUString &append( const wxChar32* s, size_type n ) { std::basic_string *base = this; return (wxUString &) base->append( s, n ); } - inline wxUString &append( size_type n, wxChar32 c ) - { - std::basic_string *base = this; - return (wxUString &) base->append( n, c ); - } + // FIXME-VC6: VC 6.0 stl does not support all types of append functions + #ifdef __VISUALC6__ + wxUString &append( size_type n, wxChar32 c ) + { + wxU32CharBuffer buffer(n); + wxChar32 *p = buffer.data(); + size_type i; + for (i = 0; i < n; i++) + { + *p = c; + p++; + } + + std::basic_string *base = this; + return (wxUString &) base->append(buffer.data()); + } + #else + wxUString &append( size_type n, wxChar32 c ) + { + std::basic_string *base = this; + return (wxUString &) base->append( n, c ); + } + #endif // __VISUALC6__ - inline wxUString &append( wxChar32 c ) + wxUString &append( wxChar32 c ) { std::basic_string *base = this; return (wxUString &) base->append( 1, c ); @@ -360,12 +414,12 @@ public: // append [wx overload] - wxUString &append( const wxU16CharBuffer &buf ) + wxUString &append( const wxScopedU16CharBuffer &buf ) { return append( buf.data() ); } - wxUString &append( const wxU32CharBuffer &buf ) + wxUString &append( const wxScopedU32CharBuffer &buf ) { return append( buf.data() ); } @@ -375,7 +429,7 @@ public: return append( wxUString( str ) ); } - wxUString &append( const wxCharBuffer &buf ) + wxUString &append( const wxScopedCharBuffer &buf ) { return append( wxUString( buf ) ); } @@ -424,31 +478,31 @@ public: // insert [STL overloads] - inline wxUString &insert( size_type pos, const wxUString &s ) + wxUString &insert( size_type pos, const wxUString &s ) { std::basic_string *base = this; return (wxUString &) base->insert( pos, s ); } - inline wxUString &insert( size_type pos, const wxUString &s, size_type pos1, size_type n ) + wxUString &insert( size_type pos, const wxUString &s, size_type pos1, size_type n ) { std::basic_string *base = this; return (wxUString &) base->insert( pos, s, pos1, n ); } - inline wxUString &insert( size_type pos, const wxChar32 *s ) + wxUString &insert( size_type pos, const wxChar32 *s ) { std::basic_string *base = this; return (wxUString &) base->insert( pos, s ); } - inline wxUString &insert( size_type pos, const wxChar32 *s, size_type n ) + wxUString &insert( size_type pos, const wxChar32 *s, size_type n ) { std::basic_string *base = this; return (wxUString &) base->insert( pos, s, n ); } - inline wxUString &insert( size_type pos, size_type n, wxChar32 c ) + wxUString &insert( size_type pos, size_type n, wxChar32 c ) { std::basic_string *base = this; return (wxUString &) base->insert( pos, n, c ); @@ -467,17 +521,17 @@ public: return insert( n, wxUString( s ) ); } - wxUString &insert( size_type n, const wxCharBuffer &buf ) + wxUString &insert( size_type n, const wxScopedCharBuffer &buf ) { return insert( n, wxUString( buf ) ); } - wxUString &insert( size_type n, const wxU16CharBuffer &buf ) + wxUString &insert( size_type n, const wxScopedU16CharBuffer &buf ) { return insert( n, wxUString( buf ) ); } - wxUString &insert( size_type n, const wxU32CharBuffer &buf ) + wxUString &insert( size_type n, const wxScopedU32CharBuffer &buf ) { return insert( n, buf.data() ); } @@ -524,67 +578,69 @@ public: // operator = - inline wxUString& operator=(const wxUString& s) - { return assign( s ); } - inline wxUString& operator=(const wxString& s) + wxUString& operator=(const wxString& s) { return assign( s ); } - inline wxUString& operator=(const wxCStrData* s) + wxUString& operator=(const wxCStrData* s) { return assign( s ); } - inline wxUString& operator=(const char *s) + wxUString& operator=(const char *s) { return assign( s ); } - inline wxUString& operator=(const wxChar16 *s) + wxUString& operator=(const wxChar16 *s) { return assign( s ); } - inline wxUString& operator=(const wxChar32 *s) + wxUString& operator=(const wxChar32 *s) { return assign( s ); } - inline wxUString& operator=(const wxCharBuffer &s) + wxUString& operator=(const wxScopedCharBuffer &s) { return assign( s ); } - inline wxUString& operator=(const wxU16CharBuffer &s) + wxUString& operator=(const wxScopedU16CharBuffer &s) { return assign( s ); } - inline wxUString& operator=(const wxU32CharBuffer &s) + wxUString& operator=(const wxScopedU32CharBuffer &s) { return assign( s ); } - inline wxUString& operator=(const char ch) + wxUString& operator=(const char ch) { return assign( ch ); } - inline wxUString& operator=(const wxChar16 ch) + wxUString& operator=(const wxChar16 ch) { return assign( ch ); } - inline wxUString& operator=(const wxChar32 ch) + wxUString& operator=(const wxChar32 ch) { return assign( ch ); } - inline wxUString& operator=(const wxUniChar ch) + wxUString& operator=(const wxUniChar ch) { return assign( ch ); } - inline wxUString& operator=(const wxUniCharRef ch) + wxUString& operator=(const wxUniCharRef ch) { return assign( ch ); } // operator += - inline wxUString& operator+=(const wxUString& s) + wxUString& operator+=(const wxUString& s) { return append( s ); } - inline wxUString& operator+=(const wxString& s) + wxUString& operator+=(const wxString& s) { return append( s ); } - inline wxUString& operator+=(const wxCStrData* s) + wxUString& operator+=(const wxCStrData* s) { return append( s ); } - inline wxUString& operator+=(const char *s) + wxUString& operator+=(const char *s) { return append( s ); } - inline wxUString& operator+=(const wxChar16 *s) + wxUString& operator+=(const wxChar16 *s) { return append( s ); } - inline wxUString& operator+=(const wxChar32 *s) + wxUString& operator+=(const wxChar32 *s) { return append( s ); } - inline wxUString& operator+=(const wxCharBuffer &s) + wxUString& operator+=(const wxScopedCharBuffer &s) { return append( s ); } - inline wxUString& operator+=(const wxU16CharBuffer &s) + wxUString& operator+=(const wxScopedU16CharBuffer &s) { return append( s ); } - inline wxUString& operator+=(const wxU32CharBuffer &s) + wxUString& operator+=(const wxScopedU32CharBuffer &s) { return append( s ); } - inline wxUString& operator+=(const char ch) + wxUString& operator+=(const char ch) { return append( ch ); } - inline wxUString& operator+=(const wxChar16 ch) + wxUString& operator+=(const wxChar16 ch) { return append( ch ); } - inline wxUString& operator+=(const wxChar32 ch) + wxUString& operator+=(const wxChar32 ch) { return append( ch ); } - inline wxUString& operator+=(const wxUniChar ch) + wxUString& operator+=(const wxUniChar ch) { return append( ch ); } - inline wxUString& operator+=(const wxUniCharRef ch) + wxUString& operator+=(const wxUniCharRef ch) { return append( ch ); } }; +#ifdef __VISUALC__ + #pragma warning(pop) +#endif + inline wxUString operator+(const wxUString &s1, const wxUString &s2) { wxUString ret( s1 ); ret.append( s2 ); return ret; } inline wxUString operator+(const wxUString &s1, const char *s2) @@ -597,11 +653,11 @@ inline wxUString operator+(const wxUString &s1, const wxChar16* s2) { return s1 + wxUString(s2); } inline wxUString operator+(const wxUString &s1, const wxChar32 *s2) { return s1 + wxUString(s2); } -inline wxUString operator+(const wxUString &s1, const wxCharBuffer &s2) +inline wxUString operator+(const wxUString &s1, const wxScopedCharBuffer &s2) { return s1 + wxUString(s2); } -inline wxUString operator+(const wxUString &s1, const wxU16CharBuffer &s2) +inline wxUString operator+(const wxUString &s1, const wxScopedU16CharBuffer &s2) { return s1 + wxUString(s2); } -inline wxUString operator+(const wxUString &s1, const wxU32CharBuffer &s2) +inline wxUString operator+(const wxUString &s1, const wxScopedU32CharBuffer &s2) { return s1 + wxUString(s2); } inline wxUString operator+(const wxUString &s1, char s2) { return s1 + wxUString(s2); } @@ -624,11 +680,11 @@ inline wxUString operator+(const wxChar16* s1, const wxUString &s2) { return wxUString(s1) + s2; } inline wxUString operator+(const wxChar32 *s1, const wxUString &s2) { return wxUString(s1) + s2; } -inline wxUString operator+(const wxCharBuffer &s1, const wxUString &s2) +inline wxUString operator+(const wxScopedCharBuffer &s1, const wxUString &s2) { return wxUString(s1) + s2; } -inline wxUString operator+(const wxU16CharBuffer &s1, const wxUString &s2) +inline wxUString operator+(const wxScopedU16CharBuffer &s1, const wxUString &s2) { return wxUString(s1) + s2; } -inline wxUString operator+(const wxU32CharBuffer &s1, const wxUString &s2) +inline wxUString operator+(const wxScopedU32CharBuffer &s1, const wxUString &s2) { return wxUString(s1) + s2; } inline wxUString operator+(char s1, const wxUString &s2) { return wxUString(s1) + s2; } @@ -686,10 +742,9 @@ wxUSTRING_COMP_OPERATORS( const wxString & ) wxUSTRING_COMP_OPERATORS( const char * ) wxUSTRING_COMP_OPERATORS( const wxChar16 * ) wxUSTRING_COMP_OPERATORS( const wxChar32 * ) -wxUSTRING_COMP_OPERATORS( const wxCharBuffer & ) -wxUSTRING_COMP_OPERATORS( const wxU16CharBuffer & ) -wxUSTRING_COMP_OPERATORS( const wxU32CharBuffer & ) +wxUSTRING_COMP_OPERATORS( const wxScopedCharBuffer & ) +wxUSTRING_COMP_OPERATORS( const wxScopedU16CharBuffer & ) +wxUSTRING_COMP_OPERATORS( const wxScopedU32CharBuffer & ) wxUSTRING_COMP_OPERATORS( const wxCStrData * ) -#endif - // _WX_USTRING_H_BASE_ +#endif // _WX_USTRING_H_