X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/de4983f3236c2043479abb21857aca958a7b61f0..f6669958924c3c3833e2932b65598b06073d2e65:/include/wx/ustring.h diff --git a/include/wx/ustring.h b/include/wx/ustring.h index 68494d5767..5b0d377e74 100644 --- a/include/wx/ustring.h +++ b/include/wx/ustring.h @@ -31,6 +31,13 @@ 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 { @@ -38,7 +45,6 @@ public: wxUString() { } wxUString( const wxChar32 *str ) { assign(str); } - wxUString( const wxUString &str ) { assign(str); } wxUString( const wxScopedU32CharBuffer &buf ) { assign(buf); } wxUString( const char *str ) { assign(str); } @@ -193,17 +199,43 @@ public: return (wxUString &) base->assign( str, pos, n ); } - 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); + } - 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( size_type n, wxChar32 ch ) + { + std::basic_string *base = this; + return (wxUString &) base->assign( n, ch ); + } + #endif // __VISUALC6__ wxUString &assign( const wxScopedU32CharBuffer &buf ) { @@ -350,11 +382,29 @@ public: return (wxUString &) base->append( s, n ); } - 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__ wxUString &append( wxChar32 c ) { @@ -528,8 +578,6 @@ public: // operator = - wxUString& operator=(const wxUString& s) - { return assign( s ); } wxUString& operator=(const wxString& s) { return assign( s ); } wxUString& operator=(const wxCStrData* s) @@ -589,6 +637,10 @@ public: }; +#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)