ConfigurationKeyComparer
Implements IComparer to order configuration keys.
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace Microsoft.Extensions.Configuration
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public class ConfigurationKeyComparer : IComparer<string>
{
private const char KeyDelimiter = ':';
public static ConfigurationKeyComparer Instance { get; } = new ConfigurationKeyComparer();
internal static Comparison<string> Comparison { get; }
[System.Runtime.CompilerServices.NullableContext(2)]
public int Compare(string x, string y)
{
ReadOnlySpan<char> readOnlySpan = MemoryExtensions.AsSpan(x);
ReadOnlySpan<char> readOnlySpan2 = MemoryExtensions.AsSpan(y);
readOnlySpan = <Compare>g__SkipAheadOnDelimiter|7_0(readOnlySpan);
readOnlySpan2 = <Compare>g__SkipAheadOnDelimiter|7_0(readOnlySpan2);
while (!readOnlySpan.IsEmpty && !readOnlySpan2.IsEmpty) {
int num = readOnlySpan.IndexOf(':');
int num2 = readOnlySpan2.IndexOf(':');
int num3 = <Compare>g__Compare|7_1((num == -1) ? readOnlySpan : readOnlySpan.Slice(0, num), (num2 == -1) ? readOnlySpan2 : readOnlySpan2.Slice(0, num2));
if (num3 != 0)
return num3;
readOnlySpan = ((num == -1) ? default(ReadOnlySpan<char>) : <Compare>g__SkipAheadOnDelimiter|7_0(readOnlySpan.Slice(num + 1)));
readOnlySpan2 = ((num2 == -1) ? default(ReadOnlySpan<char>) : <Compare>g__SkipAheadOnDelimiter|7_0(readOnlySpan2.Slice(num2 + 1)));
}
if (!readOnlySpan.IsEmpty)
return 1;
if (!readOnlySpan2.IsEmpty)
return -1;
return 0;
}
static ConfigurationKeyComparer()
{
ConfigurationKeyComparer instance = Instance;
Comparison = instance.Compare;
}
}
}