diff --git a/source/ps/utf16string.h b/source/ps/utf16string.h new file mode 100755 index 0000000000..a0d24987b6 --- /dev/null +++ b/source/ps/utf16string.h @@ -0,0 +1,92 @@ +/* + A basic_string derivative that works with uint16_t as its underlying char + type. +*/ +#ifndef utf16string_H +#define utf16string_H + +#include +#include "types.h" + +typedef uint16_t utf16_t; +typedef std::basic_string utf16string; +typedef std::basic_stringstream utf16stringstream; + +namespace std { + template<> + struct char_traits + { + typedef utf16_t char_type; + typedef int int_type; + typedef streampos pos_type; + typedef streamoff off_type; + typedef mbstate_t state_type; + + static void assign(char_type& c1, const char_type& c2) + { c1 = c2; } + + static bool eq(const char_type& c1, const char_type& c2) + { return c1 == c2; } + + static bool lt(const char_type& c1, const char_type& c2) + { return c1 < c2; } + + static int compare(const char_type* s1, const char_type* s2, size_t n) + { + return memcmp(s1, s2, n*sizeof(char_type)); + } + + static size_t length(const char_type* s) + { + const char_type* end=s; + while (*end) end++; + return end-s; + } + + static const char_type* find(const char_type* s, size_t n, const char_type& a) + { + size_t i; + for (i=0;i