1%include <std_common.i> 2#if defined(SWIG_WCHAR) 3%include <wchar.i> 4#endif 5 6namespace 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 128namespace 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