1 #ifndef SILICIUM_OS_STRING_HPP
2 #define SILICIUM_OS_STRING_HPP
7 # include <silicium/win32/win32.hpp>
22 typedef std::basic_string<os_char>
os_string;
25 typedef os_string winapi_string;
39 return os_string(original.begin(), original.end());
56 inline winapi_string utf8_to_winapi_string(
char const *original,
size_t length)
58 if (length > static_cast<size_t>((std::numeric_limits<int>::max)()))
60 throw std::invalid_argument(
"Input string is too long for WinAPI");
62 int const output_size = MultiByteToWideChar(CP_UTF8, 0, original, static_cast<int>(length),
nullptr, 0);
63 assert(output_size >= 0);
66 assert(GetLastError() == ERROR_NO_UNICODE_TRANSLATION);
67 throw std::invalid_argument(
"Input string is not UTF-8");
70 result.resize(static_cast<size_t>(output_size));
73 MultiByteToWideChar(CP_UTF8, 0, original, static_cast<int>(length), &result[0], output_size);
81 return win32::utf8_to_winapi_string(c_str, std::strlen(c_str));
86 return win32::utf8_to_winapi_string(original.data(), original.size());
91 return win32::utf8_to_winapi_string(begin, end - begin);
101 if (str.length() >
static_cast<size_t>((std::numeric_limits<int>::max)()))
103 throw std::invalid_argument(
"Input string is too long for WinAPI");
105 int destination_length = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), str.length(),
nullptr, 0, 0, FALSE);
106 if (!destination_length)
111 result.resize(destination_length);
112 if (!WideCharToMultiByte(CP_UTF8, 0, str.c_str(), str.length(), &result.front(), destination_length, 0, FALSE))
121 return std::string(str.begin(), str.end());
os_string to_os_string(os_string original)
Definition: os_string.hpp:31
Definition: absolute_path.hpp:19
BOOST_CONSTEXPR Iterator const & end(iterator_range< Iterator > const &range)
Definition: iterator_range.hpp:136
boost::container::string noexcept_string
Definition: noexcept_string.hpp:26
void throw_last_error()
Definition: throw_last_error.hpp:13
char os_char
Definition: os_string.hpp:19
BOOST_CONSTEXPR Iterator const & begin(iterator_range< Iterator > const &range)
Definition: iterator_range.hpp:123
std::string to_utf8_string(os_string const &str)
Definition: os_string.hpp:119
noexcept_string os_string
Definition: os_string.hpp:28