| // Copyright Vladimir Prus 2004. |
| // Distributed under the Boost Software License, Version 1.0. |
| // (See accompanying file LICENSE_1_0.txt |
| // or copy at http://www.boost.org/LICENSE_1_0.txt) |
| |
| #ifndef BOOST_CONVERT_HPP_VP_2004_04_28 |
| #define BOOST_CONVERT_HPP_VP_2004_04_28 |
| |
| #include <boost/program_options/config.hpp> |
| |
| #if !defined(BOOST_NO_STD_WSTRING) |
| |
| #include <boost/detail/workaround.hpp> |
| |
| #include <string> |
| #include <vector> |
| #include <locale> |
| // for mbstate_t |
| #include <cwchar> |
| #include <stdexcept> |
| |
| #if defined(BOOST_NO_STDC_NAMESPACE) |
| #include <wchar.h> |
| namespace std |
| { |
| using ::mbstate_t; |
| } |
| #endif |
| |
| namespace boost { |
| |
| /** Converts from local 8 bit encoding into wchar_t string using |
| the specified locale facet. */ |
| BOOST_PROGRAM_OPTIONS_DECL std::wstring |
| from_8_bit(const std::string& s, |
| const std::codecvt<wchar_t, char, std::mbstate_t>& cvt); |
| |
| /** Converts from wchar_t string into local 8 bit encoding into using |
| the specified locale facet. */ |
| BOOST_PROGRAM_OPTIONS_DECL std::string |
| to_8_bit(const std::wstring& s, |
| const std::codecvt<wchar_t, char, std::mbstate_t>& cvt); |
| |
| |
| /** Converts 's', which is assumed to be in UTF8 encoding, into wide |
| string. */ |
| BOOST_PROGRAM_OPTIONS_DECL std::wstring |
| from_utf8(const std::string& s); |
| |
| /** Converts wide string 's' into string in UTF8 encoding. */ |
| BOOST_PROGRAM_OPTIONS_DECL std::string |
| to_utf8(const std::wstring& s); |
| |
| /** Converts wide string 's' into local 8 bit encoding determined by |
| the current locale. */ |
| BOOST_PROGRAM_OPTIONS_DECL std::string |
| to_local_8_bit(const std::wstring& s); |
| |
| /** Converts 's', which is assumed to be in local 8 bit encoding, into wide |
| string. */ |
| BOOST_PROGRAM_OPTIONS_DECL std::wstring |
| from_local_8_bit(const std::string& s); |
| |
| namespace program_options |
| { |
| /** Convert the input string into internal encoding used by |
| program_options. Presence of this function allows to avoid |
| specializing all methods which access input on wchar_t. |
| */ |
| BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::string&); |
| /** @overload */ |
| BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::wstring&); |
| |
| template<class T> |
| std::vector<std::string> to_internal(const std::vector<T>& s) |
| { |
| std::vector<std::string> result; |
| for (unsigned i = 0; i < s.size(); ++i) |
| result.push_back(to_internal(s[i])); |
| return result; |
| } |
| |
| } |
| |
| |
| |
| } |
| |
| #else |
| #include <vector> |
| #include <string> |
| namespace boost{ |
| namespace program_options{ |
| BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::string&); |
| |
| template<class T> |
| std::vector<std::string> to_internal(const std::vector<T>& s) |
| { |
| std::vector<std::string> result; |
| for (unsigned i = 0; i < s.size(); ++i) |
| result.push_back(to_internal(s[i])); |
| return result; |
| } |
| } |
| } |
| #endif |
| #endif |