-
Notifications
You must be signed in to change notification settings - Fork 0
/
version_wrapper.cs
72 lines (61 loc) · 2.67 KB
/
version_wrapper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System;
using Windows.ApplicationModel;
namespace AppinstallerWorkaround
{
// si I can do comparisons
public class version_wrapper : IComparable<version_wrapper> {
public int CompareTo(version_wrapper other) {
if (ReferenceEquals(this, other)) return 0;
if (ReferenceEquals(null, other)) return 1;
var major_comparison = major.CompareTo(other.major);
if (major_comparison != 0) return major_comparison;
var minor_comparison = minor.CompareTo(other.minor);
if (minor_comparison != 0) return minor_comparison;
var build_comparison = build.CompareTo(other.build);
if (build_comparison != 0) return build_comparison;
return revision.CompareTo(other.revision);
}
protected bool Equals(version_wrapper other) {
return major == other.major && minor == other.minor && build == other.build && revision == other.revision;
}
public override bool Equals(object obj) {
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((version_wrapper) obj);
}
public override int GetHashCode() {
unchecked {
var hash_code = major.GetHashCode();
hash_code = (hash_code * 397) ^ minor.GetHashCode();
hash_code = (hash_code * 397) ^ build.GetHashCode();
hash_code = (hash_code * 397) ^ revision.GetHashCode();
return hash_code;
}
}
public static bool operator <(version_wrapper left, version_wrapper right) {
return left.CompareTo(right) < 0;
}
public static bool operator >(version_wrapper left, version_wrapper right) {
return left.CompareTo(right) > 0;
}
public static bool operator ==(version_wrapper left, version_wrapper right) {
return Equals(left, right);
}
public static bool operator !=(version_wrapper left, version_wrapper right) {
return !Equals(left, right);
}
public readonly ushort major;
public readonly ushort minor;
public readonly ushort build;
public readonly ushort revision;
public version_wrapper(ushort major, ushort minor, ushort build, ushort revision) {
this.major = major;
this.minor = minor;
this.build = build;
this.revision = revision;
}
public version_wrapper(PackageVersion v) : this(v.Major, v.Minor, v.Build, v.Revision) {
}
}
}