//# This file is a part of toml++ and is subject to the the terms of the MIT license. //# Copyright (c) Mark Gillard //# See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. // SPDX-License-Identifier: MIT #pragma once //# {{ #include "preprocessor.h" #if !TOML_IMPLEMENTATION #error This is an implementation-only header. #endif //# }} #if TOML_ENABLE_WINDOWS_COMPAT #include "std_string.h" #ifndef _WINDOWS_ #if TOML_INCLUDE_WINDOWS_H #include #else extern "C" __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int CodePage, unsigned long dwFlags, const wchar_t* lpWideCharStr, int cchWideChar, char* lpMultiByteStr, int cbMultiByte, const char* lpDefaultChar, int* lpUsedDefaultChar); extern "C" __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int CodePage, unsigned long dwFlags, const char* lpMultiByteStr, int cbMultiByte, wchar_t* lpWideCharStr, int cchWideChar); #endif // TOML_INCLUDE_WINDOWS_H #endif // _WINDOWS_ #include "header_start.h" TOML_IMPL_NAMESPACE_START { TOML_EXTERNAL_LINKAGE std::string narrow(std::wstring_view str) { if (str.empty()) return {}; std::string s; const auto len = ::WideCharToMultiByte(65001, 0, str.data(), static_cast(str.length()), nullptr, 0, nullptr, nullptr); if (len) { s.resize(static_cast(len)); ::WideCharToMultiByte(65001, 0, str.data(), static_cast(str.length()), s.data(), len, nullptr, nullptr); } return s; } TOML_EXTERNAL_LINKAGE std::wstring widen(std::string_view str) { if (str.empty()) return {}; std::wstring s; const auto len = ::MultiByteToWideChar(65001, 0, str.data(), static_cast(str.length()), nullptr, 0); if (len) { s.resize(static_cast(len)); ::MultiByteToWideChar(65001, 0, str.data(), static_cast(str.length()), s.data(), len); } return s; } #if TOML_HAS_CHAR8 TOML_EXTERNAL_LINKAGE std::wstring widen(std::u8string_view str) { if (str.empty()) return {}; return widen(std::string_view{ reinterpret_cast(str.data()), str.length() }); } #endif // TOML_HAS_CHAR8 } TOML_IMPL_NAMESPACE_END; #include "header_end.h" #endif // TOML_ENABLE_WINDOWS_COMPAT