19 #ifndef INCLUDE_UTIL_TCHAR_HPP
20 #define INCLUDE_UTIL_TCHAR_HPP
25 #if (defined(UNICODE) || defined(_UNICODE)) && !defined(BOOST_WINDOWS)
26 #error UNICODE and _UNICODE should only be defined for Windows builds.
31 #ifndef BOOST_NO_STD_WSTRING
34 #pragma warning( push )
35 #pragma warning( disable : 4996 ) // warning C4996: 'ctime' was declared deprecated
38 inline std::wstring stringToWstring(
const std::string &s)
43 const char *sz = s.c_str();
44 std::size_t szlen = s.length();
45 std::vector<wchar_t> vec(szlen);
46 wchar_t *wsz = &vec[0];
47 std::size_t wszlen = mbstowcs(wsz, sz, szlen);
48 if (wszlen == std::size_t(-1))
throw std::runtime_error(
"mbstowcs() failed");
49 ws.assign(wsz, wszlen);
54 inline std::string wstringToString(
const std::wstring &ws)
59 const wchar_t *wsz = ws.c_str();
60 std::size_t wszlen = ws.length();
61 std::vector<char> vec(4*wszlen);
63 std::size_t szlen = wcstombs(sz, wsz, wszlen);
64 if (szlen == std::size_t(-1))
throw std::runtime_error(
"wcstombs() failed");
71 #pragma warning( pop )
77 #if !defined(BOOST_WINDOWS) || defined(UNICODE)
79 #define RCF_T(x) L ## x
80 typedef std::wstring tstring;
81 inline tstring toTstring(std::string s) {
return stringToWstring(s); }
82 inline tstring toTstring(std::wstring s) {
return s; }
83 inline std::string toAstring(tstring s) {
return wstringToString(s); }
84 inline std::wstring toWstring(tstring s) {
return s; }
89 typedef std::string tstring;
90 inline tstring toTstring(std::string s) {
return s; }
91 inline tstring toTstring(std::wstring ws) {
return wstringToString(ws); }
92 inline std::string toAstring(tstring s) {
return s; }
93 inline std::wstring toWstring(tstring s) {
return stringToWstring(s); }
99 #endif // ! INCLUDE_UTIL_TCHAR_HPP