This commit is contained in:
Mikhail 2026-03-16 22:57:16 +08:00
parent 8472280d4b
commit 856682b28e
3 changed files with 34 additions and 27 deletions

View File

@ -1086,7 +1086,7 @@ namespace DCFApixels.DragonECS.Core.Internal
[Il2CppSetOption(Option.NullChecks, false)]
[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
#endif
internal readonly struct IncCountComparer : IStructComparer<int>
internal readonly struct IncCountComparer : IComparer<int>
{
public readonly EcsWorld.PoolSlot[] counts;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@ -1105,7 +1105,7 @@ namespace DCFApixels.DragonECS.Core.Internal
[Il2CppSetOption(Option.NullChecks, false)]
[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
#endif
internal readonly struct ExcCountComparer : IStructComparer<int>
internal readonly struct ExcCountComparer : IComparer<int>
{
public readonly EcsWorld.PoolSlot[] counts;
[MethodImpl(MethodImplOptions.AggressiveInlining)]

View File

@ -12,6 +12,38 @@ using Unity.IL2CPP.CompilerServices;
namespace DCFApixels.DragonECS.Core.Internal
{
#if ENABLE_IL2CPP
[Il2CppSetOption(Option.NullChecks, false)]
[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
#endif
internal static class ArraySortUtility
{
internal static StructComparison<T> ToStruct<T>(this Comparison<T> self)
{
return new StructComparison<T>(self);
}
public static void Sort<T>(Span<T> span, Comparison<T> comparison)
{
var c = comparison.ToStruct();
ArraySortUtility<T, StructComparison<T>>.Sort(span, ref c);
}
}
#if ENABLE_IL2CPP
[Il2CppSetOption(Option.NullChecks, false)]
[Il2CppSetOption(Option.ArrayBoundsChecks, false)]
#endif
internal readonly struct StructComparison<T> : IComparer<T>
{
public readonly Comparison<T> Comparison;
public StructComparison(Comparison<T> comparison)
{
Comparison = comparison;
}
public int Compare(T x, T y)
{
return Comparison(x, y);
}
}
// a > b = return > 0
// int Compare(T a, T b);

View File

@ -281,29 +281,4 @@ namespace DCFApixels.DragonECS.Core.Internal
return $"{name}({range.Count()}) {{{string.Join(", ", range.Select(o => o.ToString()))}}})";
}
}
internal static class SpanUtility
{
internal static StructComparison<T> ToStruct<T>(this Comparison<T> self)
{
return new StructComparison<T>(self);
}
public static void Sort<T>(Span<T> span, Comparison<T> comparison)
{
var c = comparison.ToStruct();
ArraySortUtility<T, StructComparison<T>>.Sort(span, ref c);
}
}
internal readonly struct StructComparison<T> : IComparer<T>
{
public readonly Comparison<T> Comparison;
public StructComparison(Comparison<T> comparison)
{
Comparison = comparison;
}
public int Compare(T x, T y)
{
return Comparison(x, y);
}
}
}