12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- //
- // Copyright (c) 2022-2023 Alexander Grund
- //
- // Distributed under the Boost Software License, Version 1.0.
- // https://www.boost.org/LICENSE_1_0.txt
- #ifndef BOOST_LOCALE_DETAIL_ENCODING_HPP_INCLUDED
- #define BOOST_LOCALE_DETAIL_ENCODING_HPP_INCLUDED
- #include <boost/locale/config.hpp>
- #include <boost/locale/encoding_errors.hpp>
- #include <boost/utility/string_view.hpp>
- #include <memory>
- #include <string>
- /// \cond INTERNAL
- namespace boost { namespace locale { namespace conv { namespace detail {
- template<typename CharIn, typename CharOut>
- class BOOST_SYMBOL_VISIBLE charset_converter {
- public:
- using char_out_type = CharOut;
- using char_in_type = CharIn;
- using string_type = std::basic_string<CharOut>;
- virtual ~charset_converter() = default;
- virtual string_type convert(const CharIn* begin, const CharIn* end) = 0;
- string_type convert(const boost::basic_string_view<CharIn>& text)
- {
- return convert(text.data(), text.data() + text.length());
- }
- };
- using narrow_converter = charset_converter<char, char>;
- template<typename CharType>
- using utf_encoder = charset_converter<char, CharType>;
- template<typename CharType>
- using utf_decoder = charset_converter<CharType, char>;
- enum class conv_backend { Default, IConv, ICU, WinAPI };
- template<typename Char>
- BOOST_LOCALE_DECL std::unique_ptr<utf_encoder<Char>>
- make_utf_encoder(const std::string& charset, method_type how, conv_backend impl = conv_backend::Default);
- template<typename Char>
- BOOST_LOCALE_DECL std::unique_ptr<utf_decoder<Char>>
- make_utf_decoder(const std::string& charset, method_type how, conv_backend impl = conv_backend::Default);
- BOOST_LOCALE_DECL std::unique_ptr<narrow_converter>
- make_narrow_converter(const std::string& src_encoding,
- const std::string& target_encoding,
- method_type how,
- conv_backend impl = conv_backend::Default);
- }}}} // namespace boost::locale::conv::detail
- /// \endcond
- #endif
|