1 %include <std_common.i> 2 #if defined(SWIG_WCHAR) 3 %include <wchar.i> 4 #endif 5 6 namespace std 7 { 8 9 /// 21.1.2 Basis for explicit _Traits specialization 10 /// NB: That for any given actual character type this definition is 11 /// probably wrong. 12 template<class _CharT> 13 struct char_traits 14 { 15 }; 16 17 18 /// 21.1.4 char_traits specializations 19 template<> 20 struct char_traits<char> { 21 typedef char char_type; 22 typedef int int_type; 23 typedef streampos pos_type; 24 typedef streamoff off_type; 25 typedef mbstate_t state_type; 26 27 static void 28 assign(char_type& __c1, const char_type& __c2); 29 30 static bool 31 eq(const char_type& __c1, const char_type& __c2); 32 33 static bool 34 lt(const char_type& __c1, const char_type& __c2); 35 36 static int 37 compare(const char_type* __s1, const char_type* __s2, size_t __n); 38 39 static size_t 40 length(const char_type* __s); 41 42 static const char_type* 43 find(const char_type* __s, size_t __n, const char_type& __a); 44 45 static char_type* 46 move(char_type* __s1, const char_type* __s2, size_t __n); 47 48 static char_type* 49 copy(char_type* __s1, const char_type* __s2, size_t __n); 50 51 static char_type* 52 assign(char_type* __s, size_t __n, char_type __a); 53 54 static char_type 55 to_char_type(const int_type& __c); 56 57 // To keep both the byte 0xff and the eof symbol 0xffffffff 58 // from ending up as 0xffffffff. 59 static int_type 60 to_int_type(const char_type& __c); 61 62 static bool 63 eq_int_type(const int_type& __c1, const int_type& __c2); 64 65 static int_type 66 eof() ; 67 68 static int_type 69 not_eof(const int_type& __c); 70 }; 71 72 73 #if defined(SWIG_WCHAR) 74 template<> 75 struct char_traits<wchar_t> 76 { 77 typedef wchar_t char_type; 78 typedef wint_t int_type; 79 typedef streamoff off_type; 80 typedef wstreampos pos_type; 81 typedef mbstate_t state_type; 82 83 static void 84 assign(char_type& __c1, const char_type& __c2); 85 86 static bool 87 eq(const char_type& __c1, const char_type& __c2); 88 89 static bool 90 lt(const char_type& __c1, const char_type& __c2); 91 92 static int 93 compare(const char_type* __s1, const char_type* __s2, size_t __n); 94 95 static size_t 96 length(const char_type* __s); 97 98 static const char_type* 99 find(const char_type* __s, size_t __n, const char_type& __a); 100 101 static char_type* 102 move(char_type* __s1, const char_type* __s2, int_type __n); 103 104 static char_type* 105 copy(char_type* __s1, const char_type* __s2, size_t __n); 106 107 static char_type* 108 assign(char_type* __s, size_t __n, char_type __a); 109 110 static char_type 111 to_char_type(const int_type& __c) ; 112 113 static int_type 114 to_int_type(const char_type& __c) ; 115 116 static bool 117 eq_int_type(const int_type& __c1, const int_type& __c2); 118 119 static int_type 120 eof() ; 121 122 static int_type 123 not_eof(const int_type& __c); 124 }; 125 #endif 126 } 127 128 namespace std { 129 #ifndef SWIG_STL_WRAP_TRAITS 130 %template() char_traits<char>; 131 #if defined(SWIG_WCHAR) 132 %template() char_traits<wchar_t>; 133 #endif 134 #else 135 %template(char_traits_c) char_traits<char>; 136 #if defined(SWIG_WCHAR) 137 %template(char_traits_w) char_traits<wchar_t>; 138 #endif 139 #endif 140 } 141