123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- using System;
- using System.Collections.Generic;
- using System.Text.RegularExpressions;
- namespace Wayne.Lib
- {
-
-
-
- public class VersionNumber : IComparable<VersionNumber>, IEquatable<VersionNumber>
- {
- #region Fields
- private const char Dot = '.';
- private static readonly Regex re = new Regex(@"^\d+(\.\d+)*$");
- private readonly string versionString;
- #endregion
- #region Construction
-
-
-
-
-
- public VersionNumber(string versionString)
- {
- if (!re.IsMatch(versionString))
- {
- throw new ArgumentException(versionString + " is not a valid version string");
- }
- this.versionString = versionString;
- }
- #endregion
- #region Methods
-
-
-
-
-
- public int CompareTo(VersionNumber other)
- {
- Stack<int> ps = Convert(this.ToString());
- Stack<int> qs = Convert(other.ToString());
-
- while (ps.Count > 0 && qs.Count > 0)
- {
- int p = ps.Pop();
- int q = qs.Pop();
- if (p < q)
- {
- return -1;
- }
- if (p > q)
- {
- return 1;
- }
- }
-
- if (ps.Count == 0 && qs.Count == 0)
- {
-
- return 0;
- }
- if (ps.Count > 0 && qs.Count == 0)
- {
-
- return 1;
- }
- if (ps.Count == 0 && qs.Count > 0)
- {
-
- return -1;
- }
-
- throw new ArgumentException("this cannot happen");
- }
- private static Stack<int> Convert(string fullString)
- {
- List<int> list = new List<int>();
- foreach (string number in fullString.Split(Dot))
- {
- list.Add(int.Parse(number));
- }
- list.Reverse();
- return new Stack<int>(list);
- }
-
-
-
-
- public override string ToString()
- {
- return versionString;
- }
-
-
-
-
-
- public override bool Equals(object obj)
- {
- VersionNumber otherVersionNumber = obj as VersionNumber;
- if (otherVersionNumber != null)
- return this.Equals(otherVersionNumber);
- else
- return false;
- }
-
-
-
-
-
- public bool Equals(VersionNumber other)
- {
- return this.CompareTo(other) == 0;
- }
-
-
-
-
- public override int GetHashCode()
- {
- return versionString.GetHashCode();
- }
- #endregion
- }
- }
|