Blame view

3rdparty/boost_1_81_0/boost/locale/encoding_utf.hpp 2.18 KB
63e88f80   Hu Chunming   提交三方库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  //
  // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
  //
  // Distributed under the Boost Software License, Version 1.0.
  // https://www.boost.org/LICENSE_1_0.txt
  
  #ifndef BOOST_LOCALE_ENCODING_UTF_HPP_INCLUDED
  #define BOOST_LOCALE_ENCODING_UTF_HPP_INCLUDED
  
  #include <boost/locale/encoding_errors.hpp>
  #include <boost/locale/utf.hpp>
  #include <boost/locale/util/string.hpp>
  #include <iterator>
  
  #ifdef BOOST_MSVC
  #    pragma warning(push)
  #    pragma warning(disable : 4275 4251 4231 4660)
  #endif
  
  namespace boost { namespace locale { namespace conv {
      /// \addtogroup codepage
      ///
      /// @{
  
      /// Convert a Unicode text in range [begin,end) to other Unicode encoding
      template<typename CharOut, typename CharIn>
      std::basic_string<CharOut> utf_to_utf(const CharIn* begin, const CharIn* end, method_type how = default_method)
      {
          std::basic_string<CharOut> result;
          result.reserve(end - begin);
          typedef std::back_insert_iterator<std::basic_string<CharOut>> inserter_type;
          inserter_type inserter(result);
          utf::code_point c;
          while(begin != end) {
              c = utf::utf_traits<CharIn>::template decode<const CharIn*>(begin, end);
              if(c == utf::illegal || c == utf::incomplete) {
                  if(how == stop)
                      throw conversion_error();
              } else {
                  utf::utf_traits<CharOut>::template encode<inserter_type>(c, inserter);
              }
          }
          return result;
      }
  
      /// Convert a Unicode NULL terminated string \a str other Unicode encoding
      template<typename CharOut, typename CharIn>
      std::basic_string<CharOut> utf_to_utf(const CharIn* str, method_type how = default_method)
      {
          return utf_to_utf<CharOut, CharIn>(str, util::str_end(str), how);
      }
  
      /// Convert a Unicode string \a str other Unicode encoding
      template<typename CharOut, typename CharIn>
      std::basic_string<CharOut> utf_to_utf(const std::basic_string<CharIn>& str, method_type how = default_method)
      {
          return utf_to_utf<CharOut, CharIn>(str.c_str(), str.c_str() + str.size(), how);
      }
  
      /// @}
  
  }}} // namespace boost::locale::conv
  
  #ifdef BOOST_MSVC
  #    pragma warning(pop)
  #endif
  
  #endif