#include "wx/chartype.h"
#include "wx/stringimpl.h"
-class WXDLLIMPEXP_BASE wxUniCharRef;
-class WXDLLIMPEXP_BASE wxStringIteratorNode;
+class WXDLLIMPEXP_FWD_BASE wxUniCharRef;
+class WXDLLIMPEXP_FWD_BASE wxStringIteratorNode;
// This class represents single Unicode character. It can be converted to
// and from char or wchar_t and implements commonly used character operations.
private:
- static value_type From8bit(char c);
- static char To8bit(value_type c);
+ // notice that we implement these functions inline for 7-bit ASCII
+ // characters purely for performance reasons
+ static value_type From8bit(char c)
+ {
+#if wxUSE_UNICODE
+ if ( (unsigned char)c < 0x80 )
+ return c;
+
+ return FromHi8bit(c);
+#else
+ return c;
+#endif
+ }
+
+ static char To8bit(value_type c)
+ {
+#if wxUSE_UNICODE
+ if ( c < 0x80 )
+ return c;
+
+ return ToHi8bit(c);
+#else
+ return c;
+#endif
+ }
+
+ // helpers of the functions above called to deal with non-ASCII chars
+ static value_type FromHi8bit(char c);
+ static char ToHi8bit(value_type c);
private:
value_type m_value;
wxUniChar UniChar() const { return *m_pos; }
#endif
- friend class WXDLLIMPEXP_BASE wxUniChar;
+ friend class WXDLLIMPEXP_FWD_BASE wxUniChar;
private:
// reference to the string and pointer to the character in string