mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-12 01:38:37 +12:00
Make RPCS3 compile in C++2a mode
This commit is contained in:
parent
e9e8f0c5b7
commit
1a78e0e80c
13 changed files with 141 additions and 109 deletions
|
@ -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"0";
|
||||
result += reinterpret_cast<const char*>(u8"0");
|
||||
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"A";
|
||||
result += reinterpret_cast<const char*>(u8"A");
|
||||
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"0"[2]}:
|
||||
case char{u8"1"[2]}:
|
||||
case char{u8"2"[2]}:
|
||||
case char{u8"3"[2]}:
|
||||
case char{u8"4"[2]}:
|
||||
case char{u8"5"[2]}:
|
||||
case char{u8"6"[2]}:
|
||||
case char{u8"7"[2]}:
|
||||
case char{u8"8"[2]}:
|
||||
case char{u8"9"[2]}:
|
||||
case char2{u8"0"[2]}:
|
||||
case char2{u8"1"[2]}:
|
||||
case char2{u8"2"[2]}:
|
||||
case char2{u8"3"[2]}:
|
||||
case char2{u8"4"[2]}:
|
||||
case char2{u8"5"[2]}:
|
||||
case char2{u8"6"[2]}:
|
||||
case char2{u8"7"[2]}:
|
||||
case char2{u8"8"[2]}:
|
||||
case char2{u8"9"[2]}:
|
||||
{
|
||||
result += path[i + 2];
|
||||
result.back() -= u8"0"[2];
|
||||
continue;
|
||||
}
|
||||
case char{u8"A"[2]}:
|
||||
case char{u8"B"[2]}:
|
||||
case char{u8"C"[2]}:
|
||||
case char{u8"D"[2]}:
|
||||
case char{u8"E"[2]}:
|
||||
case char{u8"F"[2]}:
|
||||
case char{u8"G"[2]}:
|
||||
case char{u8"H"[2]}:
|
||||
case char{u8"I"[2]}:
|
||||
case char{u8"J"[2]}:
|
||||
case char{u8"K"[2]}:
|
||||
case char{u8"L"[2]}:
|
||||
case char{u8"M"[2]}:
|
||||
case char{u8"N"[2]}:
|
||||
case char{u8"O"[2]}:
|
||||
case char{u8"P"[2]}:
|
||||
case char{u8"Q"[2]}:
|
||||
case char{u8"R"[2]}:
|
||||
case char{u8"S"[2]}:
|
||||
case char{u8"T"[2]}:
|
||||
case char{u8"U"[2]}:
|
||||
case char{u8"V"[2]}:
|
||||
case char2{u8"A"[2]}:
|
||||
case char2{u8"B"[2]}:
|
||||
case char2{u8"C"[2]}:
|
||||
case char2{u8"D"[2]}:
|
||||
case char2{u8"E"[2]}:
|
||||
case char2{u8"F"[2]}:
|
||||
case char2{u8"G"[2]}:
|
||||
case char2{u8"H"[2]}:
|
||||
case char2{u8"I"[2]}:
|
||||
case char2{u8"J"[2]}:
|
||||
case char2{u8"K"[2]}:
|
||||
case char2{u8"L"[2]}:
|
||||
case char2{u8"M"[2]}:
|
||||
case char2{u8"N"[2]}:
|
||||
case char2{u8"O"[2]}:
|
||||
case char2{u8"P"[2]}:
|
||||
case char2{u8"Q"[2]}:
|
||||
case char2{u8"R"[2]}:
|
||||
case char2{u8"S"[2]}:
|
||||
case char2{u8"T"[2]}:
|
||||
case char2{u8"U"[2]}:
|
||||
case char2{u8"V"[2]}:
|
||||
{
|
||||
result += path[i + 2];
|
||||
result.back() -= u8"A"[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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue