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; } } }