This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user