Home | History | Annotate | Download | only in std
      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