Refactor code structure for improved readability and maintainability; optimize performance in key functions.
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace StellaOps.Canonicalization.Culture;
|
||||
|
||||
/// <summary>
|
||||
/// Ensures all string operations use invariant culture.
|
||||
/// </summary>
|
||||
public static class InvariantCulture
|
||||
{
|
||||
public static IDisposable Scope()
|
||||
{
|
||||
var original = CultureInfo.CurrentCulture;
|
||||
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
|
||||
CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture;
|
||||
return new CultureScope(original);
|
||||
}
|
||||
|
||||
public static int Compare(string? a, string? b) => string.Compare(a, b, StringComparison.Ordinal);
|
||||
|
||||
public static string FormatDecimal(decimal value) => value.ToString("G", CultureInfo.InvariantCulture);
|
||||
|
||||
public static decimal ParseDecimal(string value) => decimal.Parse(value, CultureInfo.InvariantCulture);
|
||||
|
||||
private sealed class CultureScope : IDisposable
|
||||
{
|
||||
private readonly CultureInfo _original;
|
||||
public CultureScope(CultureInfo original) => _original = original;
|
||||
public void Dispose()
|
||||
{
|
||||
CultureInfo.CurrentCulture = _original;
|
||||
CultureInfo.CurrentUICulture = _original;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// UTF-8 encoding utilities.
|
||||
/// </summary>
|
||||
public static class Utf8Encoding
|
||||
{
|
||||
public static string Normalize(string input)
|
||||
{
|
||||
return input.Normalize(NormalizationForm.FormC);
|
||||
}
|
||||
|
||||
public static byte[] GetBytes(string input) => Encoding.UTF8.GetBytes(Normalize(input));
|
||||
}
|
||||
Reference in New Issue
Block a user