Make RPCS3 compile in C++2a mode

This commit is contained in:
Nekotekina 2020-02-04 21:37:00 +03:00
parent e9e8f0c5b7
commit 1a78e0e80c
13 changed files with 141 additions and 109 deletions

View file

@ -274,6 +274,12 @@ std::string vfs::get(std::string_view vpath, std::vector<std::string>* out_dir,
return std::string{result_base} + vfs::escape(fmt::merge(result, "/"));
}
#if __cpp_char8_t >= 201811
using char2 = char8_t;
#else
using char2 = char;
#endif
std::string vfs::escape(std::string_view path, bool escape_slash)
{
std::string result;
@ -281,7 +287,7 @@ std::string vfs::escape(std::string_view path, bool escape_slash)
for (std::size_t i = 0, s = path.size(); i < s; i++)
{
switch (char c = path[i])
switch (char2 c = path[i])
{
case 0:
case 1:
@ -294,7 +300,7 @@ std::string vfs::escape(std::string_view path, bool escape_slash)
case 8:
case 9:
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
result.back() += c;
break;
}
@ -321,85 +327,85 @@ std::string vfs::escape(std::string_view path, bool escape_slash)
case 30:
case 31:
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
result.back() += c;
result.back() -= 10;
break;
}
case '<':
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
break;
}
case '>':
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
break;
}
case ':':
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
break;
}
case '"':
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
break;
}
case '\\':
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
break;
}
case '|':
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
break;
}
case '?':
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
break;
}
case '*':
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
break;
}
case '/':
{
if (escape_slash)
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
break;
}
result += c;
break;
}
case char{u8""[0]}:
case char2{u8""[0]}:
{
// Escape full-width characters 0xFF01..0xFF5e with (0xFF01)
switch (path[i + 1])
switch (char2 c2 = path[i + 1])
{
case char{u8""[1]}:
case char2{u8""[1]}:
{
const uchar c3 = reinterpret_cast<const uchar&>(path[i + 2]);
const uchar c3 = path[i + 2];
if (c3 >= 0x81 && c3 <= 0xbf)
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
}
break;
}
case char{u8""[1]}:
case char2{u8""[1]}:
{
const uchar c3 = reinterpret_cast<const uchar&>(path[i + 2]);
const uchar c3 = path[i + 2];
if (c3 >= 0x80 && c3 <= 0x9e)
{
result += u8"";
result += reinterpret_cast<const char*>(u8"");
}
break;
@ -427,105 +433,105 @@ std::string vfs::unescape(std::string_view path)
for (std::size_t i = 0, s = path.size(); i < s; i++)
{
switch (char c = path[i])
switch (char2 c = path[i])
{
case char{u8""[0]}:
case char2{u8""[0]}:
{
switch (path[i + 1])
switch (char2 c2 = path[i + 1])
{
case char{u8""[1]}:
case char2{u8""[1]}:
{
const uchar c3 = reinterpret_cast<const uchar&>(path[i + 2]);
const uchar c3 = path[i + 2];
if (c3 >= 0x81 && c3 <= 0xbf)
{
switch (path[i + 2])
switch (static_cast<char2>(c3))
{
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
{
result += path[i + 2];
result.back() -= u8""[2];
continue;
}
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
case char2{u8""[2]}:
{
result += path[i + 2];
result.back() -= u8""[2];
result.back() += 10;
continue;
}
case char{u8""[2]}:
case char2{u8""[2]}:
{
i += 3;
result += c;
continue;
}
case char{u8""[2]}:
case char2{u8""[2]}:
{
result += '<';
break;
}
case char{u8""[2]}:
case char2{u8""[2]}:
{
result += '>';
break;
}
case char{u8""[2]}:
case char2{u8""[2]}:
{
result += ':';
break;
}
case char{u8""[2]}:
case char2{u8""[2]}:
{
result += '"';
break;
}
case char{u8""[2]}:
case char2{u8""[2]}:
{
result += '\\';
break;
}
case char{u8""[2]}:
case char2{u8""[2]}:
{
result += '?';
break;
}
case char{u8""[2]}:
case char2{u8""[2]}:
{
result += '*';
break;
}
case char{u8""[2]}:
case char2{u8""[2]}:
{
if (i == 0)
{
@ -552,15 +558,15 @@ std::string vfs::unescape(std::string_view path)
break;
}
case char{u8""[1]}:
case char2{u8""[1]}:
{
const uchar c3 = reinterpret_cast<const uchar&>(path[i + 2]);
const uchar c3 = path[i + 2];
if (c3 >= 0x80 && c3 <= 0x9e)
{
switch (path[i + 2])
switch (static_cast<char2>(c3))
{
case char{u8""[2]}:
case char2{u8""[2]}:
{
result += '|';
break;