-/////////////////////////////////////////////////////////////////////////////
+
// Name: wx/ustring.h
// Purpose: 32-bit string (UCS-4)
// Author: Robert Roebling
#include <string>
-WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxCharTypeBuffer<wxChar32> )
-
#if SIZEOF_WCHAR_T == 2
-
typedef wxWCharBuffer wxU16CharBuffer;
-
#else
-
-class WXDLLIMPEXP_BASE wxU16CharBuffer : public wxCharTypeBuffer<wxChar16>
-{
-public:
- typedef wxCharTypeBuffer<wxChar16> wxCharTypeBufferBase;
-
- wxU16CharBuffer(const wxCharTypeBufferBase& buf)
- : wxCharTypeBufferBase(buf) {}
-
- wxU16CharBuffer(const CharType *str = NULL) : wxCharTypeBufferBase(str) {}
- wxU16CharBuffer(size_t len) : wxCharTypeBufferBase(len) {}
-};
-
+typedef wxCharTypeBuffer<wxChar16> wxU16CharBuffer;
#endif
-
-
-#if SIZEOF_WCHAR_T == 2
-
-class WXDLLIMPEXP_BASE wxU32CharBuffer : public wxCharTypeBuffer<wxChar32>
-{
-public:
- typedef wxCharTypeBuffer<wxChar32> wxCharTypeBufferBase;
-
- wxU32CharBuffer(const wxCharTypeBufferBase& buf)
- : wxCharTypeBufferBase(buf) {}
-
- wxU32CharBuffer(const CharType *str = NULL) : wxCharTypeBufferBase(str) {}
- wxU32CharBuffer(size_t len) : wxCharTypeBufferBase(len) {}
-};
-
-#else
-
+#if SIZEOF_WCHAR_T == 4
typedef wxWCharBuffer wxU32CharBuffer;
-
+#else
+typedef wxCharTypeBuffer<wxChar32> wxU32CharBuffer;
#endif
+
class WXDLLIMPEXP_BASE wxUString: public std::basic_string<wxChar32>
{
-public:
+public:
wxUString() { }
-
+
wxUString( const wxChar32 *str ) { assign(str); }
wxUString( const wxUString &str ) { assign(str); }
wxUString( const wxU32CharBuffer &buf ) { assign(buf); }
-
+
wxUString( const char *str ) { assign(str); }
wxUString( const wxCharBuffer &buf ) { assign(buf); }
wxUString( const char *str, const wxMBConv &conv ) { assign(str,conv); }
wxUString( const wxChar16 *str ) { assign(str); }
wxUString( const wxU16CharBuffer &buf ) { assign(buf); }
-
+
wxUString( const wxCStrData *cstr ) { assign(cstr); }
wxUString( const wxString &str ) { assign(str); }
-
+
wxUString( char ch ) { assign(ch); }
wxUString( wxChar16 ch ) { assign(ch); }
wxUString( wxChar32 ch ) { assign(ch); }
wxUString( size_type n, wxChar32 ch ) { assign(n,ch); }
wxUString( size_type n, wxUniChar ch ) { assign(n,ch); }
wxUString( size_type n, wxUniCharRef ch ) { assign(n,ch); }
-
+
// static construction
-
+
static wxUString FromAscii( const char *str, size_type n )
{
wxUString ret;
ret.assignFromAscii( str, n );
return ret;
}
-
+
static wxUString FromAscii( const char *str )
{
wxUString ret;
ret.assignFromAscii( str );
return ret;
}
-
+
static wxUString FromUTF8( const char *str, size_type n )
{
wxUString ret;
ret.assignFromUTF8( str, n );
return ret;
}
-
+
static wxUString FromUTF8( const char *str )
{
wxUString ret;
ret.assignFromUTF8( str );
return ret;
}
-
+
static wxUString FromUTF16( const wxChar16 *str, size_type n )
{
wxUString ret;
ret.assignFromUTF16( str, n );
return ret;
}
-
+
static wxUString FromUTF16( const wxChar16 *str )
{
wxUString ret;
ret.assignFromUTF16( str );
return ret;
}
-
+
// assign from encoding
-
+
wxUString &assignFromAscii( const char *str );
wxUString &assignFromAscii( const char *str, size_type n );
wxUString &assignFromUTF8( const char *str );
wxUString &assignFromUTF16( const wxChar16* str, size_type n );
wxUString &assignFromCString( const char* str );
wxUString &assignFromCString( const char* str, const wxMBConv &conv );
-
+
// conversions
-
+
wxCharBuffer utf8_str() const;
wxU16CharBuffer utf16_str() const;
-
+
#if SIZEOF_WCHAR_T == 2
wxWCharBuffer wc_str() const
{
return utf16_str();
}
#else
- wchar_t* wx_str()
+ const wchar_t* wx_str()
{
return c_str();
}
#endif
// assign
-
+
inline wxUString &assign( const wxChar32* str )
{
std::basic_string<wxChar32> *base = this;
return (wxUString &) base->assign( str );
}
-
+
inline wxUString &assign( const wxChar32* str, size_type n )
{
std::basic_string<wxChar32> *base = this;
return (wxUString &) base->assign( str, n );
}
-
+
inline wxUString &assign( const wxUString &str )
{
std::basic_string<wxChar32> *base = this;
return (wxUString &) base->assign( str );
}
-
+
inline wxUString &assign( const wxUString &str, size_type pos, size_type n )
{
std::basic_string<wxChar32> *base = this;
return (wxUString &) base->assign( str, pos, n );
}
-
+
inline wxUString &assign( wxChar32 ch )
{
std::basic_string<wxChar32> *base = this;
return (wxUString &) base->assign( (size_type) 1, ch );
}
-
+
inline wxUString &assign( size_type n, wxChar32 ch )
{
std::basic_string<wxChar32> *base = this;
return (wxUString &) base->assign( n, ch );
}
-
+
wxUString &assign( const wxU32CharBuffer &buf )
{
return assign( buf.data() );
}
-
+
wxUString &assign( const char *str )
{
return assignFromCString( str );
}
-
+
wxUString &assign( const wxCharBuffer &buf )
- {
+ {
return assignFromCString( buf.data() );
}
-
+
wxUString &assign( const char *str, const wxMBConv &conv )
- {
+ {
return assignFromCString( str, conv );
}
-
+
wxUString &assign( const wxCharBuffer &buf, const wxMBConv &conv )
- {
+ {
return assignFromCString( buf.data(), conv );
}
-
+
wxUString &assign( const wxChar16 *str )
{
return assignFromUTF16( str );
}
-
+
wxUString &assign( const wxU16CharBuffer &buf )
{
return assignFromUTF16( buf.data() );
}
-
+
wxUString &assign( const wxCStrData *cstr )
{
#if SIZEOF_WCHAR_T == 2
return assign( cstr->AsWChar() );
#endif
}
-
+
wxUString &assign( const wxString &str )
{
#if wxUSE_UNICODE_UTF8
#if SIZEOF_WCHAR_T == 2
return assignFromUTF16( str.wc_str() );
#else
- return assign( wc_str() );
+ return assign( str.wc_str() );
#endif
#endif
}
-
+
wxUString &assign( char ch )
{
char buf[2];
buf[1] = 0;
return assignFromCString( buf );
}
-
+
wxUString &assign( size_type n, char ch )
- {
+ {
wxCharBuffer buffer(n);
char *p = buffer.data();
size_type i;
}
return assignFromCString( buffer.data() );
}
-
+
wxUString &assign( wxChar16 ch )
{
wxChar16 buf[2];
buf[1] = 0;
return assignFromUTF16( buf );
}
-
+
wxUString &assign( size_type n, wxChar16 ch )
{
wxU16CharBuffer buffer(n);
}
return assignFromUTF16( buffer.data() );
}
-
+
wxUString &assign( wxUniChar ch )
{
return assign( (const wxChar32) ch.GetValue() );
}
-
+
wxUString &assign( size_type n, wxUniChar ch )
{
return assign( n, (const wxChar32) ch.GetValue() );
}
-
+
wxUString &assign( wxUniCharRef ch )
{
return assign( (const wxChar32) ch.GetValue() );
}
-
+
wxUString &assign( size_type n, wxUniCharRef ch )
{
return assign( n, (const wxChar32) ch.GetValue() );
}
-
+
// append [STL overload]
-
+
inline wxUString &append( const wxUString &s )
{
std::basic_string<wxChar32> *base = this;
return (wxUString &) base->append( s );
}
-
+
inline wxUString &append( const wxUString &s, size_type pos, size_type n )
{
std::basic_string<wxChar32> *base = this;
return (wxUString &) base->append( s, pos, n );
}
-
+
inline wxUString &append( const wxChar32* s )
{
std::basic_string<wxChar32> *base = this;
{
return append( wxUString( str ) );
}
-
+
wxUString &append( const wxString &str )
{
return append( wxUString( str ) );
}
-
+
wxUString &append( const wxCStrData *cstr )
{
return append( wxUString( cstr ) );
}
-
+
wxUString &append( char ch )
{
char buf[2];
buf[1] = 0;
return append( buf );
}
-
+
wxUString &append( wxChar16 ch )
{
wxChar16 buf[2];
buf[1] = 0;
return append( buf );
}
-
+
wxUString &append( wxUniChar ch )
{
return append( (size_type) 1, (wxChar32) ch.GetValue() );
return append( (size_type) 1, (wxChar32) ch.GetValue() );
}
-
+
// insert [STL overloads]
-
+
inline wxUString &insert( size_type pos, const wxUString &s )
{
std::basic_string<wxChar32> *base = this;
{
return insert( n, wxUString( s ) );
}
-
+
wxUString &insert( size_type n, const wxCStrData *cstr )
{
return insert( n, wxUString( cstr ) );
}
-
+
wxUString &insert( size_type n, char ch )
{
char buf[2];
buf[1] = 0;
return insert( n, buf );
}
-
+
wxUString &insert( size_type n, wchar_t ch )
{
wchar_t buf[2];
buf[1] = 0;
return insert( n, buf );
}
-
+
// insert iterator
-
+
iterator insert( iterator it, wxChar32 ch )
{
std::basic_string<wxChar32> *base = this;
return base->insert( it, ch );
}
-
+
void insert(iterator it, const_iterator first, const_iterator last)
{
std::basic_string<wxChar32> *base = this;
{ return assign( ch ); }
inline wxUString& operator=(const wxUniCharRef ch)
{ return assign( ch ); }
-
+
// operator +=
inline wxUString& operator+=(const wxUString& s)
{ return append( s ); }
{ return append( ch ); }
inline wxUString& operator+=(const wxUniCharRef ch)
{ return append( ch ); }
-
+
};
inline wxUString operator+(const wxUString &s1, const wxUString &s2)
inline bool operator!=(const wxUString& s1, const wxUString& s2)
{ return s1.compare( s2 ) != 0; }
inline bool operator< (const wxUString& s1, const wxUString& s2)
- { wxPrintf( "test\n"); return s1.compare( s2 ) < 0; }
+ { return s1.compare( s2 ) < 0; }
inline bool operator> (const wxUString& s1, const wxUString& s2)
{ return s1.compare( s2 ) > 0; }
inline bool operator<=(const wxUString& s1, const wxUString& s2)