// Copyright (c) 2020 Egor Tensin // This file is part of the "winapi-utf8" project. // For details, see https://github.com/egor-tensin/winapi-utf8. // Distributed under the MIT License. /** * \file * \brief UTF-8 <-> UTF-16 conversion functions */ #pragma once #include #include #include #include namespace winapi { /* sizeof(wchar_t) == 4 on Linux, we don't care about that. */ static_assert(sizeof(wchar_t) == 2, "This is Windows, right?"); /** Convert UTF-8 string to UTF-16. */ std::wstring widen(const std::string&); /** * Convert UTF-8 string to UTF-16. * \param src Memory address of a UTF-8 string. * \param nb String size (in bytes). */ std::wstring widen(const void* src, std::size_t nb); /** * Convert UTF-8 string to UTF-16. * \param src Buffer holding a UTF-8 string. */ template > std::wstring widen(const std::vector& src) { return widen(src.data(), src.size() * sizeof(T)); } /** Convert UTF-16 string to UTF-8. */ std::string narrow(const std::wstring&); /** Convert UTF-16 string to UTF-8. */ std::string narrow(const std::u16string&); /** * Convert UTF-16 string to UTF-8. * \param src Memory address of a UTF-16 string. * \param nb String size (in bytes). */ std::string narrow(const void* src, std::size_t nb); /** * Convert UTF-16 string to UTF-8. * \param src Buffer holding a UTF-16 string. */ template > std::string narrow(const std::vector& src) { return narrow(src.data(), src.size() * sizeof(T)); } } // namespace winapi