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

source code of boost/libs/locale/include/boost/locale/encoding_utf.hpp