OSDN Git Service

merge original branch.
[tortoisegit/TortoiseGitJp.git] / src / ResText / codecvt.h
1 \r
2 /**     Several code conversions facets.\r
3 \r
4         E.g. this is how to convert UCS-2 to UTF-8\r
5 \r
6         @code\r
7         wifstream ifs("input", ios_base::binary);\r
8         wofstream ofs("output", ios_base::binary);\r
9 \r
10         ifs.rdbuf()->pubimbue(locale(locale(), new ucs2_conversion()));\r
11         ofs.rbbuf()->pubimbue(locale(locale(), new utf8_conversion()));\r
12         ofs << ifs.rdbuf();\r
13         @endcode\r
14 \r
15         @author Vladimir Prus <ghost@cs.msu.su>\r
16 \r
17         @file\r
18 */\r
19 \r
20 #include <locale>\r
21 #pragma warning(push)\r
22 #pragma warning(disable: 4511)\r
23 #pragma warning(disable: 4512)\r
24 \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
28 {\r
29 protected:\r
30 \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
34 \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
38 \r
39     bool do_always_noconv() const throw() { return false; }\r
40     int  do_encoding() const throw() { return 2; }\r
41 };\r
42 \r
43 \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
47 {\r
48 protected:\r
49 \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
53 \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
57 \r
58     bool do_always_noconv() const throw() { return false; }\r
59     int  do_encoding() const throw() { return 2; }\r
60 };\r
61 #pragma warning(pop)\r
62 \r
63 \r
64 \r