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