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