1/*
2 * Copyright (c) 1999
3 * Silicon Graphics Computer Systems, Inc.
4 *
5 * Copyright (c) 1999
6 * Boris Fomitchev
7 *
8 * This material is provided "as is", with absolutely no warranty expressed
9 * or implied. Any use is at your own risk.
10 *
11 * Permission to use or copy this software for any purpose is hereby granted
12 * without fee, provided the above notices are retained on all copies.
13 * Permission to modify the code and to distribute modified code is granted,
14 * provided the above notices are retained, and a notice that the code was
15 * modified is included with the above copyright notice.
16 *
17 */
18#include "stlport_prefix.h"
19
20#include <locale>
21#include <algorithm>
22
23_STLP_BEGIN_NAMESPACE
24
25//----------------------------------------------------------------------
26// codecvt<char, char, mbstate_t>
27
28codecvt<char, char, mbstate_t>::~codecvt() {}
29
30int codecvt<char, char, mbstate_t>::do_length(state_type&,
31                                              const  char* from,
32                                              const  char* end,
33                                              size_t mx) const
34{ return (int)(min) ( __STATIC_CAST(size_t, (end - from)), mx); }
35
36int codecvt<char, char, mbstate_t>::do_max_length() const _STLP_NOTHROW
37{ return 1; }
38
39bool
40codecvt<char, char, mbstate_t>::do_always_noconv() const _STLP_NOTHROW
41{ return true; }
42
43int
44codecvt<char, char, mbstate_t>::do_encoding() const _STLP_NOTHROW
45{ return 1; }
46
47codecvt_base::result
48codecvt<char, char, mbstate_t>::do_unshift(state_type& /* __state */,
49                                           char*       __to,
50                                           char*       /* __to_limit */,
51                                           char*&      __to_next) const
52{ __to_next = __to; return noconv; }
53
54codecvt_base::result
55codecvt<char, char, mbstate_t>::do_in (state_type&  /* __state */ ,
56                                       const char*  __from,
57                                       const char*  /* __from_end */,
58                                       const char*& __from_next,
59                                       char*        __to,
60                                       char*        /* __to_end */,
61                                       char*&       __to_next) const
62{ __from_next = __from; __to_next   = __to; return noconv; }
63
64codecvt_base::result
65codecvt<char, char, mbstate_t>::do_out(state_type&  /* __state */,
66                                       const char*  __from,
67                                       const char*  /* __from_end */,
68                                       const char*& __from_next,
69                                       char*        __to,
70                                       char*        /* __to_limit */,
71                                       char*&       __to_next) const
72{ __from_next = __from; __to_next   = __to; return noconv; }
73
74
75#if !defined (_STLP_NO_WCHAR_T)
76//----------------------------------------------------------------------
77// codecvt<wchar_t, char, mbstate_t>
78
79codecvt<wchar_t, char, mbstate_t>::~codecvt() {}
80
81
82codecvt<wchar_t, char, mbstate_t>::result
83codecvt<wchar_t, char, mbstate_t>::do_out(state_type&         /* state */,
84                                          const intern_type*  from,
85                                          const intern_type*  from_end,
86                                          const intern_type*& from_next,
87                                          extern_type*        to,
88                                          extern_type*        to_limit,
89                                          extern_type*&       to_next) const {
90  ptrdiff_t len = (min) (from_end - from, to_limit - to);
91  copy(from, from + len, to);
92  from_next = from + len;
93  to_next   = to   + len;
94  return ok;
95}
96
97codecvt<wchar_t, char, mbstate_t>::result
98codecvt<wchar_t, char, mbstate_t>::do_in (state_type&       /* state */,
99                                          const extern_type*  from,
100                                          const extern_type*  from_end,
101                                          const extern_type*& from_next,
102                                          intern_type*        to,
103                                          intern_type*        to_limit,
104                                          intern_type*&       to_next) const {
105  ptrdiff_t len = (min) (from_end - from, to_limit - to);
106  copy(__REINTERPRET_CAST(const unsigned char*, from),
107       __REINTERPRET_CAST(const unsigned char*, from) + len, to);
108  from_next = from + len;
109  to_next   = to   + len;
110  return ok;
111}
112
113codecvt<wchar_t, char, mbstate_t>::result
114codecvt<wchar_t, char, mbstate_t>::do_unshift(state_type&   /* state */,
115                                              extern_type*  to,
116                                              extern_type*  ,
117                                              extern_type*& to_next) const {
118  to_next = to;
119  return noconv;
120}
121
122int codecvt<wchar_t, char, mbstate_t>::do_encoding() const _STLP_NOTHROW
123{ return 1; }
124
125bool codecvt<wchar_t, char, mbstate_t>::do_always_noconv() const _STLP_NOTHROW
126{ return true; }
127
128int codecvt<wchar_t, char, mbstate_t>::do_length(state_type&,
129                                                 const  extern_type* from,
130                                                 const  extern_type* end,
131                                                 size_t mx) const
132{ return (int)(min) ((size_t) (end - from), mx); }
133
134int codecvt<wchar_t, char, mbstate_t>::do_max_length() const _STLP_NOTHROW
135{ return 1; }
136#endif /* wchar_t */
137
138_STLP_END_NAMESPACE
139
140// Local Variables:
141// mode:C++
142// End:
143
144