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