2 /** Several code conversions facets.
\r
4 E.g. this is how to convert UCS-2 to UTF-8
\r
7 wifstream ifs("input", ios_base::binary);
\r
8 wofstream ofs("output", ios_base::binary);
\r
10 ifs.rdbuf()->pubimbue(locale(locale(), new ucs2_conversion()));
\r
11 ofs.rbbuf()->pubimbue(locale(locale(), new utf8_conversion()));
\r
15 @author Vladimir Prus <ghost@cs.msu.su>
\r
21 #pragma warning(push)
\r
22 #pragma warning(disable: 4511)
\r
23 #pragma warning(disable: 4512)
\r
25 /** Conversion facet that allows to use Unicode files in UCS-2 encoding */
\r
26 class ucs2_conversion
\r
27 : public std::codecvt<wchar_t, char, std::mbstate_t>
\r
31 result do_in(std::mbstate_t& state,
\r
32 const char* from, const char* from_end, const char*& from_next,
\r
33 wchar_t* to, wchar_t* to_limit, wchar_t*& to_next) const;
\r
35 result do_out(std::mbstate_t& state,
\r
36 const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next,
\r
37 char* to, char* to_limit, char*& to_next) const;
\r
39 bool do_always_noconv() const throw() { return false; }
\r
40 int do_encoding() const throw() { return 2; }
\r
44 /** Conversion facet that allows to read Unicode files in UTF-8 encoding */
\r
45 class utf8_conversion
\r
46 : public std::codecvt<wchar_t, char, std::mbstate_t>
\r
50 result do_in(std::mbstate_t& state,
\r
51 const char* from, const char* from_end, const char*& from_next,
\r
52 wchar_t* to, wchar_t* to_limit, wchar_t*& to_next) const;
\r
54 result do_out(std::mbstate_t& state,
\r
55 const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next,
\r
56 char* to, char* to_limit, char*& to_next) const;
\r
58 bool do_always_noconv() const throw() { return false; }
\r
59 int do_encoding() const throw() { return 2; }
\r
61 #pragma warning(pop)
\r