11#if defined _WIN32 || defined WINCE
12#define LITEFX_CODECVT_USE_WIN32
21 using namespace std::string_literals;
22 using namespace std::string_view_literals;
29 constexpr auto Join(std::ranges::input_range
auto&& elements,
StringView delimiter =
""sv)
requires
30 std::convertible_to<std::ranges::range_value_t<
decltype(elements)>,
String>
32 return std::ranges::fold_left(elements | std::views::join_with(delimiter),
String{}, std::plus<>{});
35 constexpr auto WJoin(std::ranges::input_range
auto&& elements,
WStringView delimiter = L
""sv)
requires
36 std::convertible_to<std::ranges::range_value_t<
decltype(elements)>,
String>
38 return std::ranges::fold_left(elements | std::views::join_with(delimiter),
WString{}, std::plus<>{});
46 constexpr static std::uint64_t hash(
StringView string)
noexcept
48 const std::uint64_t prime = 0x00000100000001b3;
49 std::uint64_t seed = 0xcbf29ce484222325;
51 for (
auto ptr =
string.begin(); ptr !=
string.end(); ptr++)
52 seed = (seed ^ *ptr) * prime;
62 constexpr static std::uint64_t hash(
WStringView string)
noexcept
64 const std::uint64_t prime = 0x00000100000001b3;
65 std::uint64_t seed = 0xcbf29ce484222325;
67 for (
auto ptr =
string.begin(); ptr !=
string.end(); ptr++)
68 seed = (seed ^ *ptr) * prime;
79 consteval std::uint64_t
operator"" _hash(
const char*
string,
size_t chars)
noexcept
90 consteval std::uint64_t
operator"" _hash(
const wchar_t*
string,
size_t chars)
noexcept
102#if defined LITEFX_CODECVT_USE_WIN32
106 const auto size = ::MultiByteToWideChar(CP_UTF8, 0, utf8.data(),
static_cast<int>(utf8.size()),
nullptr, 0);
109 throw std::runtime_error(
"Unable to convert string to UTF-16: " + std::to_string(size));
112 ::MultiByteToWideChar(CP_UTF8, 0, utf8.data(),
static_cast<int>(utf8.size()), result.data(), size);
116 std::wstring_convert<std::codecvt_utf8_utf16<WCHAR>> conv;
117 return conv.from_bytes(utf8);
128#if defined LITEFX_CODECVT_USE_WIN32
132 const auto size = ::WideCharToMultiByte(CP_UTF8, 0, utf16.data(),
static_cast<int>(utf16.size()),
nullptr, 0,
nullptr,
nullptr);
135 throw std::runtime_error(
"Unable to convert string to UTF-8: " + std::to_string(size));
138 ::WideCharToMultiByte(CP_UTF8, 0, utf16.data(),
static_cast<int>(utf16.size()), result.data(), size,
nullptr,
nullptr);
142 std::wstring_convert<std::codecvt_utf8_utf16<WCHAR>> conv;
143 return conv.to_bytes(utf16);
148#undef LITEFX_CODECVT_USE_WIN32
String Narrow(WStringView utf16)
Converts an UTF-16 multi-byte encoded string into an UTF-8 representation.
Definition string.hpp:126
WString Widen(StringView utf8)
Converts an UTF-8 single-byte encoded string into an UTF-16 representation.
Definition string.hpp:100
constexpr auto Join(std::ranges::input_range auto &&elements, StringView delimiter=""sv)
Definition string.hpp:29
std::string String
Definition string.hpp:24
constexpr auto WJoin(std::ranges::input_range auto &&elements, WStringView delimiter=L""sv)
Definition string.hpp:35
std::string_view StringView
Definition string.hpp:26
std::wstring_view WStringView
Definition string.hpp:27
std::wstring WString
Definition string.hpp:25