#pragma once

#include <string>
#include <vector>

class UnicodeUtils
{
public:
	static std::string utf16ToUtf8String(const std::wstring& input);

	static std::wstring utf8ToUtf16WString(const std::string& input);

	static std::vector<uint32_t> utf8ToUtf32(const std::string& input);

private:
	static bool isSurrogate(wchar_t c);
	static bool isHighSurrogate(wchar_t c);
	static bool isLowSurrogate(wchar_t c);
	static uint32_t surrogateToUtf32(wchar_t high, wchar_t low);
};