aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/swig/Lib/std/std_char_traits.i
blob: b9b4def32fd25c6922025f5665b0823c61d9b913 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
%include <std_common.i>
#if defined(SWIG_WCHAR)
%include <wchar.i>
#endif

namespace std 
{
  
  /// 21.1.2 Basis for explicit _Traits specialization 
  /// NB: That for any given actual character type this definition is
  /// probably wrong.
  template<class _CharT>
  struct char_traits
  {
  };


  /// 21.1.4  char_traits specializations
  template<>
  struct char_traits<char> {
    typedef char 		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);
    
    static bool 
    eq(const char_type& __c1, const char_type& __c2);

    static bool 
    lt(const char_type& __c1, const char_type& __c2);

    static int 
    compare(const char_type* __s1, const char_type* __s2, size_t __n);

    static size_t
    length(const char_type* __s);

    static const char_type* 
    find(const char_type* __s, size_t __n, const char_type& __a);

    static char_type* 
    move(char_type* __s1, const char_type* __s2, size_t __n);

    static char_type* 
    copy(char_type* __s1, const char_type* __s2, size_t __n);

    static char_type* 
    assign(char_type* __s, size_t __n, char_type __a);

    static char_type 
    to_char_type(const int_type& __c);

    // To keep both the byte 0xff and the eof symbol 0xffffffff
    // from ending up as 0xffffffff.
    static int_type 
    to_int_type(const char_type& __c);

    static bool 
    eq_int_type(const int_type& __c1, const int_type& __c2);

    static int_type 
    eof() ;

    static int_type 
    not_eof(const int_type& __c);
  };


#if defined(SWIG_WCHAR)
  template<>
  struct char_traits<wchar_t>
  {
    typedef wchar_t 		char_type;
    typedef wint_t 		int_type;
    typedef streamoff 	off_type;
    typedef wstreampos 	pos_type;
    typedef mbstate_t 	state_type;
      
    static void 
    assign(char_type& __c1, const char_type& __c2);

    static bool 
    eq(const char_type& __c1, const char_type& __c2);

    static bool 
    lt(const char_type& __c1, const char_type& __c2);

    static int 
    compare(const char_type* __s1, const char_type* __s2, size_t __n);

    static size_t
    length(const char_type* __s);

    static const char_type* 
    find(const char_type* __s, size_t __n, const char_type& __a);

    static char_type* 
    move(char_type* __s1, const char_type* __s2, int_type __n);

    static char_type* 
    copy(char_type* __s1, const char_type* __s2, size_t __n);

    static char_type* 
    assign(char_type* __s, size_t __n, char_type __a);

    static char_type 
    to_char_type(const int_type& __c) ;

    static int_type 
    to_int_type(const char_type& __c) ;

    static bool 
    eq_int_type(const int_type& __c1, const int_type& __c2);

    static int_type 
    eof() ;

    static int_type 
    not_eof(const int_type& __c);
  };
#endif
}

namespace std {
#ifndef SWIG_STL_WRAP_TRAITS
%template() char_traits<char>;
#if defined(SWIG_WCHAR)
%template() char_traits<wchar_t>;
#endif
#else
%template(char_traits_c) char_traits<char>;
#if defined(SWIG_WCHAR)
%template(char_traits_w) char_traits<wchar_t>;
#endif
#endif
}