fix(core): Optimizes strings / .NET 5 compatibility changes (#354)
- [X] Removes some string allocations (e.g. split) - [X] Optimizes some collections - [X] Converts insensitive to extension methods of built-ins. - [X] Adds ordinal (case sensitive) string helpers - [X] Fixes conditionals for in-game commands so they use Ordinal comparisons. - [X] Replaces ToLower.Contains with InsensitiveContains - [X] Adds ValueStringBuilder - [X] Implements ValueStringBuilder in a few places where it makes sense - [X] Removes the redundant Wrap function and replaces it with an optimized version - [X] Fixes list conversions in Utility Closes #351 Bumps release version
This commit is contained in:
parent
92aae8d482
commit
77ce2e1980
117 changed files with 2000 additions and 1226 deletions
|
|
@ -148,7 +148,7 @@ namespace Server.Commands.Generic
|
|||
{
|
||||
var style = NumberStyles.Integer;
|
||||
|
||||
if (Insensitive.StartsWith(toParse, "0x"))
|
||||
if (toParse.InsensitiveStartsWith("0x"))
|
||||
{
|
||||
style = NumberStyles.HexNumber;
|
||||
toParse = toParse.Substring(2);
|
||||
|
|
@ -231,7 +231,6 @@ namespace Server.Commands.Generic
|
|||
NotEqual,
|
||||
|
||||
Contains,
|
||||
|
||||
StartsWith,
|
||||
EndsWith
|
||||
}
|
||||
|
|
@ -260,39 +259,74 @@ namespace Server.Commands.Generic
|
|||
{
|
||||
var inverse = false;
|
||||
|
||||
Type type = m_IgnoreCase ? typeof(InsensitiveStringHelpers) : typeof(OrdinalStringHelpers);
|
||||
string methodName;
|
||||
|
||||
switch (m_Operator)
|
||||
{
|
||||
case StringOperator.Equal:
|
||||
methodName = "Equals";
|
||||
break;
|
||||
|
||||
case StringOperator.NotEqual:
|
||||
methodName = "Equals";
|
||||
inverse = true;
|
||||
break;
|
||||
{
|
||||
inverse = true;
|
||||
goto case StringOperator.Equal;
|
||||
}
|
||||
case StringOperator.Equal:
|
||||
{
|
||||
if (m_IgnoreCase)
|
||||
{
|
||||
methodName = "InsensitiveEquals";
|
||||
}
|
||||
else
|
||||
{
|
||||
methodName = "EqualsOrdinal";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case StringOperator.Contains:
|
||||
methodName = "Contains";
|
||||
break;
|
||||
{
|
||||
if (m_IgnoreCase)
|
||||
{
|
||||
methodName = "InsensitiveContains";
|
||||
}
|
||||
else
|
||||
{
|
||||
methodName = "ContainsOrdinal";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case StringOperator.StartsWith:
|
||||
methodName = "StartsWith";
|
||||
break;
|
||||
{
|
||||
if (m_IgnoreCase)
|
||||
{
|
||||
methodName = "InsensitiveStartsWith";
|
||||
}
|
||||
else
|
||||
{
|
||||
methodName = "StartsWithOrdinal";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case StringOperator.EndsWith:
|
||||
methodName = "EndsWith";
|
||||
break;
|
||||
{
|
||||
if (m_IgnoreCase)
|
||||
{
|
||||
methodName = "InsensitiveEndsWith";
|
||||
}
|
||||
else
|
||||
{
|
||||
methodName = "EndsWithOrdinal";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
throw new InvalidOperationException("Invalid string comparison operator.");
|
||||
}
|
||||
|
||||
if (m_IgnoreCase || methodName == "Equals")
|
||||
if (m_Operator == StringOperator.Equal || m_Operator == StringOperator.NotEqual)
|
||||
{
|
||||
var type = m_IgnoreCase ? typeof(Insensitive) : typeof(string);
|
||||
|
||||
emitter.BeginCall(
|
||||
type.GetMethod(
|
||||
methodName,
|
||||
|
|
@ -334,7 +368,7 @@ namespace Server.Commands.Generic
|
|||
emitter.LoadLocal(temp);
|
||||
|
||||
emitter.BeginCall(
|
||||
typeof(string).GetMethod(
|
||||
type.GetMethod(
|
||||
methodName,
|
||||
BindingFlags.Public | BindingFlags.Instance,
|
||||
null,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue