Chris@16
|
1 // Copyright Vladimir Prus 2004.
|
Chris@16
|
2 // Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
3 // (See accompanying file LICENSE_1_0.txt
|
Chris@16
|
4 // or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 #ifndef BOOST_CONVERT_HPP_VP_2004_04_28
|
Chris@16
|
7 #define BOOST_CONVERT_HPP_VP_2004_04_28
|
Chris@16
|
8
|
Chris@16
|
9 #include <boost/program_options/config.hpp>
|
Chris@16
|
10
|
Chris@16
|
11 #if !defined(BOOST_NO_STD_WSTRING)
|
Chris@16
|
12
|
Chris@16
|
13 #include <boost/detail/workaround.hpp>
|
Chris@16
|
14
|
Chris@16
|
15 #include <string>
|
Chris@16
|
16 #include <vector>
|
Chris@16
|
17 #include <locale>
|
Chris@16
|
18 // for mbstate_t
|
Chris@16
|
19 #include <cwchar>
|
Chris@16
|
20 #include <stdexcept>
|
Chris@16
|
21
|
Chris@16
|
22 #if defined(BOOST_NO_STDC_NAMESPACE)
|
Chris@16
|
23 #include <wchar.h>
|
Chris@16
|
24 namespace std
|
Chris@16
|
25 {
|
Chris@16
|
26 using ::mbstate_t;
|
Chris@16
|
27 }
|
Chris@16
|
28 #endif
|
Chris@16
|
29
|
Chris@16
|
30 namespace boost {
|
Chris@16
|
31
|
Chris@16
|
32 /** Converts from local 8 bit encoding into wchar_t string using
|
Chris@16
|
33 the specified locale facet. */
|
Chris@16
|
34 BOOST_PROGRAM_OPTIONS_DECL std::wstring
|
Chris@16
|
35 from_8_bit(const std::string& s,
|
Chris@16
|
36 const std::codecvt<wchar_t, char, std::mbstate_t>& cvt);
|
Chris@16
|
37
|
Chris@16
|
38 /** Converts from wchar_t string into local 8 bit encoding into using
|
Chris@16
|
39 the specified locale facet. */
|
Chris@16
|
40 BOOST_PROGRAM_OPTIONS_DECL std::string
|
Chris@16
|
41 to_8_bit(const std::wstring& s,
|
Chris@16
|
42 const std::codecvt<wchar_t, char, std::mbstate_t>& cvt);
|
Chris@16
|
43
|
Chris@16
|
44
|
Chris@16
|
45 /** Converts 's', which is assumed to be in UTF8 encoding, into wide
|
Chris@16
|
46 string. */
|
Chris@16
|
47 BOOST_PROGRAM_OPTIONS_DECL std::wstring
|
Chris@16
|
48 from_utf8(const std::string& s);
|
Chris@16
|
49
|
Chris@16
|
50 /** Converts wide string 's' into string in UTF8 encoding. */
|
Chris@16
|
51 BOOST_PROGRAM_OPTIONS_DECL std::string
|
Chris@16
|
52 to_utf8(const std::wstring& s);
|
Chris@16
|
53
|
Chris@16
|
54 /** Converts wide string 's' into local 8 bit encoding determined by
|
Chris@16
|
55 the current locale. */
|
Chris@16
|
56 BOOST_PROGRAM_OPTIONS_DECL std::string
|
Chris@16
|
57 to_local_8_bit(const std::wstring& s);
|
Chris@16
|
58
|
Chris@16
|
59 /** Converts 's', which is assumed to be in local 8 bit encoding, into wide
|
Chris@16
|
60 string. */
|
Chris@16
|
61 BOOST_PROGRAM_OPTIONS_DECL std::wstring
|
Chris@16
|
62 from_local_8_bit(const std::string& s);
|
Chris@16
|
63
|
Chris@16
|
64 namespace program_options
|
Chris@16
|
65 {
|
Chris@16
|
66 /** Convert the input string into internal encoding used by
|
Chris@16
|
67 program_options. Presence of this function allows to avoid
|
Chris@16
|
68 specializing all methods which access input on wchar_t.
|
Chris@16
|
69 */
|
Chris@16
|
70 BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::string&);
|
Chris@16
|
71 /** @overload */
|
Chris@16
|
72 BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::wstring&);
|
Chris@16
|
73
|
Chris@16
|
74 template<class T>
|
Chris@16
|
75 std::vector<std::string> to_internal(const std::vector<T>& s)
|
Chris@16
|
76 {
|
Chris@16
|
77 std::vector<std::string> result;
|
Chris@16
|
78 for (unsigned i = 0; i < s.size(); ++i)
|
Chris@16
|
79 result.push_back(to_internal(s[i]));
|
Chris@16
|
80 return result;
|
Chris@16
|
81 }
|
Chris@16
|
82
|
Chris@16
|
83 }
|
Chris@16
|
84
|
Chris@16
|
85
|
Chris@16
|
86
|
Chris@16
|
87 }
|
Chris@16
|
88
|
Chris@16
|
89 #else
|
Chris@16
|
90 #include <vector>
|
Chris@16
|
91 #include <string>
|
Chris@16
|
92 namespace boost{
|
Chris@16
|
93 namespace program_options{
|
Chris@16
|
94 BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::string&);
|
Chris@16
|
95
|
Chris@16
|
96 template<class T>
|
Chris@16
|
97 std::vector<std::string> to_internal(const std::vector<T>& s)
|
Chris@16
|
98 {
|
Chris@16
|
99 std::vector<std::string> result;
|
Chris@16
|
100 for (unsigned i = 0; i < s.size(); ++i)
|
Chris@16
|
101 result.push_back(to_internal(s[i]));
|
Chris@16
|
102 return result;
|
Chris@16
|
103 }
|
Chris@16
|
104 }
|
Chris@16
|
105 }
|
Chris@16
|
106 #endif
|
Chris@16
|
107 #endif
|