Files
Workspace/Assets/Modules/ShrinkModFramework/Runtime/Metadata/ShrinkVersionUtility.cs
T

46 lines
1.3 KiB
C#

using System;
namespace ShrinkModFramework
{
internal static class ShrinkVersionUtility
{
public static int Compare(string left, string right)
{
if (ReferenceEquals(left, right)) return 0;
if (left == null) return -1;
if (right == null) return 1;
var leftParts = left.Split('.');
var rightParts = right.Split('.');
var max = Math.Max(leftParts.Length, rightParts.Length);
for (var i = 0; i < max; i++)
{
var leftValue = i < leftParts.Length ? ParseSegment(leftParts[i]) : 0;
var rightValue = i < rightParts.Length ? ParseSegment(rightParts[i]) : 0;
if (leftValue != rightValue)
return leftValue.CompareTo(rightValue);
}
return string.CompareOrdinal(left, right);
}
private static int ParseSegment(string segment)
{
if (string.IsNullOrEmpty(segment))
return 0;
var digits = "";
for (var i = 0; i < segment.Length; i++)
{
if (!char.IsDigit(segment[i]))
break;
digits += segment[i];
}
return int.TryParse(digits, out var value) ? value : 0;
}
}
}