Home | History | Annotate | Download | only in src
      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 
     28 codecvt<char, char, mbstate_t>::~codecvt() {}
     29 
     30 int 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 
     36 int codecvt<char, char, mbstate_t>::do_max_length() const _STLP_NOTHROW
     37 { return 1; }
     38 
     39 bool
     40 codecvt<char, char, mbstate_t>::do_always_noconv() const _STLP_NOTHROW
     41 { return true; }
     42 
     43 int
     44 codecvt<char, char, mbstate_t>::do_encoding() const _STLP_NOTHROW
     45 { return 1; }
     46 
     47 codecvt_base::result
     48 codecvt<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 
     54 codecvt_base::result
     55 codecvt<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 
     64 codecvt_base::result
     65 codecvt<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 
     79 codecvt<wchar_t, char, mbstate_t>::~codecvt() {}
     80 
     81 
     82 codecvt<wchar_t, char, mbstate_t>::result
     83 codecvt<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 
     97 codecvt<wchar_t, char, mbstate_t>::result
     98 codecvt<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 
    113 codecvt<wchar_t, char, mbstate_t>::result
    114 codecvt<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 
    122 int codecvt<wchar_t, char, mbstate_t>::do_encoding() const _STLP_NOTHROW
    123 { return 1; }
    124 
    125 bool codecvt<wchar_t, char, mbstate_t>::do_always_noconv() const _STLP_NOTHROW
    126 { return true; }
    127 
    128 int 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 
    134 int 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