fix: Cleans up string substring (#1018)

This commit is contained in:
Kamron Batman 2022-05-14 16:56:03 -07:00 committed by GitHub
parent 87b63b38a5
commit 6ec84b3c01
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 40 additions and 40 deletions

View file

@ -75,8 +75,8 @@ public class ClientVersion : IComparable<ClientVersion>, IComparer<ClientVersion
}
Major = Utility.ToInt32(fmt.AsSpan()[..br1]);
Minor = Utility.ToInt32(fmt.Substring(br1 + 1, br2 - br1 - 1));
Revision = Utility.ToInt32(fmt.Substring(br2 + 1, br3 - br2 - 1));
Minor = Utility.ToInt32(fmt.AsSpan(br1 + 1, br2 - br1 - 1));
Revision = Utility.ToInt32(fmt.AsSpan(br2 + 1, br3 - br2 - 1));
if (br3 < fmt.Length)
{
@ -89,7 +89,7 @@ public class ClientVersion : IComparable<ClientVersion>, IComparer<ClientVersion
}
else
{
Patch = Utility.ToInt32(fmt.Substring(br3 + 1, fmt.Length - br3 - 1));
Patch = Utility.ToInt32(fmt.AsSpan(br3 + 1, fmt.Length - br3 - 1));
}
}
@ -214,29 +214,22 @@ public class ClientVersion : IComparable<ClientVersion>, IComparer<ClientVersion
{
using var builder = new ValueStringBuilder(stackalloc char[32]);
builder.Append(Major.ToString());
builder.Append('.');
builder.Append(Minor.ToString());
builder.Append('.');
builder.Append(Revision.ToString());
if (Major <= 5 && Minor <= 0 && Revision <= 6) // Anything before 5.0.7
if (Major > 5 || Minor > 0 || Revision > 6)
{
if (Patch > 0)
{
builder.Append((char)('a' + (Patch - 1)));
}
builder.Append($"{Major}.{Minor}.{Revision}.{Patch}");
}
else if (Patch > 0)
{
builder.Append($"{Major}.{Minor}.{Revision}{(char)('a' + (Patch - 1))}");
}
else
{
builder.Append('.');
builder.Append(Patch.ToString());
builder.Append($"{Major}.{Minor}.{Revision}");
}
if (Type != ClientType.Regular)
if (Type == ClientType.UOTD)
{
builder.Append(' ');
builder.Append(Type.ToString().ToLower());
builder.Append(" uotd");
}
return builder.ToString();

View file

@ -58,12 +58,12 @@ namespace Server
var start = value.IndexOfOrdinal('(');
var end = value.IndexOf(',', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var x);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var x);
start = end;
end = value.IndexOf(')', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var y);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var y);
return new Point2D(x, y);
}

View file

@ -86,17 +86,17 @@ namespace Server
var start = value.IndexOfOrdinal('(');
var end = value.IndexOf(',', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var x);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var x);
start = end;
end = value.IndexOf(',', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var y);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var y);
start = end;
end = value.IndexOf(')', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var z);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var z);
return new Point3D(x, y, z);
}

View file

@ -13,6 +13,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************/
using System;
namespace Server
{
[NoSort]
@ -46,22 +48,22 @@ namespace Server
var start = value.IndexOfOrdinal('(');
var end = value.IndexOf(',', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var x);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var x);
start = end;
end = value.IndexOf(',', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var y);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var y);
start = end;
end = value.IndexOf(',', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var w);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var w);
start = end;
end = value.IndexOf(')', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var h);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var h);
return new Rectangle2D(x, y, w, h);
}

View file

@ -145,22 +145,22 @@ namespace Server
var start = value.IndexOfOrdinal('(');
var end = value.IndexOf(',', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var x);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var x);
start = end;
end = value.IndexOf(',', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var y);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var y);
start = end;
end = value.IndexOf(',', start + 1);
Utility.ToInt32(value.Substring(start + 1, end - (start + 1)).Trim(), out var z);
Utility.ToInt32(value.AsSpan(start + 1, end - (start + 1)).Trim(), out var z);
start = end;
end = value.IndexOf(')', start + 1);
var map = Map.Parse(value.Substring(start + 1, end - (start + 1)).Trim());
var map = Map.Parse(value.AsSpan(start + 1, end - (start + 1)).Trim());
return new WorldLocation(x, y, z, map);
}

View file

@ -28,7 +28,7 @@ namespace Server.Json
return new ClientVersion(reader.GetString());
}
throw new JsonException($"Value must be a string");
throw new JsonException("Value must be a string");
}
public override void Write(Utf8JsonWriter writer, ClientVersion value, JsonSerializerOptions options) =>

View file

@ -26,7 +26,7 @@ namespace Server.Json
{
JsonTokenType.String => Map.Parse(reader.GetString()),
JsonTokenType.Number => Map.Maps[reader.GetInt32()],
_ => throw new JsonException($"Value must be a number or string")
_ => throw new JsonException("Value must be a number or string")
};
public override void Write(Utf8JsonWriter writer, Map value, JsonSerializerOptions options) =>

View file

@ -484,9 +484,14 @@ public sealed class Map : IComparable<Map>
return mapValues;
}
public static Map Parse(string value)
// Handles null checks
public static Map Parse(string value) => Parse(value ?? ReadOnlySpan<char>.Empty);
public static Map Parse(ReadOnlySpan<char> value)
{
if (string.IsNullOrWhiteSpace(value))
value = value.Trim();
if (value.Length == 0)
{
return null;
}
@ -513,7 +518,7 @@ public sealed class Map : IComparable<Map>
continue;
}
if (index >= 0 && map.MapIndex == index || map.Name.InsensitiveEquals(value))
if (index >= 0 && map.MapIndex == index || value.InsensitiveEquals(map.Name))
{
return map;
}

View file

@ -1092,7 +1092,7 @@ namespace Server
return;
}
Count = Utility.ToInt32(str.Substring(start, index));
Count = Utility.ToInt32(str.AsSpan(start, index));
start = index + 1;
index = str.IndexOf('+', start);
@ -1109,7 +1109,7 @@ namespace Server
index = str.Length;
}
Sides = Utility.ToInt32(str.Substring(start, index - start));
Sides = Utility.ToInt32(str.AsSpan(start, index - start));
if (index == str.Length)
{
@ -1119,7 +1119,7 @@ namespace Server
start = index + 1;
index = str.Length;
Bonus = Utility.ToInt32(str.Substring(start, index - start));
Bonus = Utility.ToInt32(str.AsSpan(start, index - start));
if (negative)
{