feat: Adds cliloc support and fixes valuestringbuilder ctor (#1013)
- [X] Adds cliloc support using the following API:
```cs
public static class Localization
{
string GetText(int number);
string GetText(int number, string lang);
string Format(int number, params object[] args);
string Format(int number, string lang, params object[] args);
string Format(int number, $"{arg1}{arg2}{arg3}");
string Format(int number, lang, $"{arg1}{arg2}{arg3}");
bool TryGetLocalization(int number, out LocalizationEntry entry);
bool TryGetLocalization(int number, string lang, out LocalizationEntry entry);
}
public class LocalizationEntry
{
string Language { get; }
string Number { get; }
string Text { get; }
string?[] TextSlices { get; } // Used for string building
string StringFormatter { get; }
string Format(params object[] args);
string Format($"{arg1}{arg2}{arg3}");
}
```
- [X] Fixes a bug with ValueStringBuilder and default initialization size
- [X] Optimizes ValueStringBuilder to use `ISpanFormattable`
- [X] Adds `Append<T>(T value);` support ValueStringBuilder
- [X] Adds `Append($"");` string interpolation support to ValueStringBuider
This commit is contained in:
parent
790cb5d733
commit
be7da3a3dc
8 changed files with 1046 additions and 156 deletions
|
|
@ -1284,96 +1284,6 @@ namespace Server
|
|||
return (value + mask) ^ mask;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static long Abs(this long value)
|
||||
{
|
||||
long mask = value >> 63;
|
||||
return (value + mask) ^ mask;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static int CountDigits(this uint value)
|
||||
{
|
||||
int digits = 1;
|
||||
if (value >= 100000)
|
||||
{
|
||||
value /= 100000;
|
||||
digits += 5;
|
||||
}
|
||||
|
||||
if (value < 10)
|
||||
{
|
||||
// no-op
|
||||
}
|
||||
else if (value < 100)
|
||||
{
|
||||
digits++;
|
||||
}
|
||||
else if (value < 1000)
|
||||
{
|
||||
digits += 2;
|
||||
}
|
||||
else if (value < 10000)
|
||||
{
|
||||
digits += 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
digits += 4;
|
||||
}
|
||||
|
||||
return digits;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static int CountDigits(this int value)
|
||||
{
|
||||
int absValue = Abs(value);
|
||||
|
||||
int digits = 1;
|
||||
if (absValue >= 100000)
|
||||
{
|
||||
absValue /= 100000;
|
||||
digits += 5;
|
||||
}
|
||||
|
||||
if (absValue < 10)
|
||||
{
|
||||
// no-op
|
||||
}
|
||||
else if (absValue < 100)
|
||||
{
|
||||
digits++;
|
||||
}
|
||||
else if (absValue < 1000)
|
||||
{
|
||||
digits += 2;
|
||||
}
|
||||
else if (absValue < 10000)
|
||||
{
|
||||
digits += 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
digits += 4;
|
||||
}
|
||||
|
||||
if (value < 0)
|
||||
{
|
||||
digits += 1; // negative
|
||||
}
|
||||
|
||||
return digits;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static uint DivRem(uint a, uint b, out uint result)
|
||||
{
|
||||
uint div = a / b;
|
||||
result = a - div * b;
|
||||
return div;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static string GetTimeStamp() => Core.Now.ToTimeStamp();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue