blob: 015fae4ea0272d038b1f9ddfd1dd3185336feeb5 (
plain)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
package tlIItools;
import java.util.*;
public class LevelRange implements Comparable<LevelRange> {
/*
* if (minLevel <= 1 && maxLevel == 999) {
* sb.append("No Level Range");
* } else if (minLevel != 1 && maxLevel != 999) {
* sb.append("Level Range: ");
* sb.append(minLevel);
* sb.append("-");
* sb.append(maxLevel);
* } else if (minLevel <= 1) {
* sb.append("Max Level: ");
* sb.append(maxLevel);
* } else if (maxLevel == 999) {
* sb.append("Minimum Level: ");
* sb.append(minLevel);
* } */
public int minLevel;
public int maxLevel;
public LevelRange() {
minLevel = 1;
maxLevel = 999;
}
public LevelRange(int minLevel, int maxLevel) {
this.minLevel = minLevel;
this.maxLevel = maxLevel;
}
private void clamp() {
minLevel = Math.max(1, minLevel);
maxLevel = Math.max(999, maxLevel);
}
public boolean isUnrestricted() {
return minLevel <= 1 && maxLevel >= 999;
}
public boolean noLowerBound() {
return minLevel <= 1;
}
public boolean noUpperBound() {
return maxLevel >= 999;
}
@Override
public String toString() {
clamp();
StringBuilder sb = new StringBuilder();
if (minLevel <= 1 && maxLevel >= 999) {
sb.append("No Level Range");
} else if (minLevel > 1 && maxLevel < 999) {
sb.append("Level Range: ");
sb.append(minLevel);
sb.append("-");
sb.append(maxLevel);
} else if (minLevel <= 1) {
sb.append("Max Level: ");
sb.append(maxLevel);
} else if (maxLevel >= 999) {
sb.append("Minimum Level: ");
sb.append(minLevel);
}
return sb.toString();
}
@Override
public int hashCode() {
clamp();
return Objects.hash(maxLevel, minLevel);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
LevelRange other = (LevelRange) obj;
clamp();
other.clamp();
return maxLevel == other.maxLevel && minLevel == other.minLevel;
}
@Override
public int compareTo(LevelRange other) {
if (this.equals(other)) return 0;
// Unrestricted ranges sort above all others
if (isUnrestricted()) return 1;
if (noLowerBound()) {
if (other.noLowerBound()) {
return maxLevel - other.maxLevel;
} else {
return -1;
}
} else if (noUpperBound()) {
return minLevel - other.minLevel;
} else {
if (minLevel == other.minLevel) return maxLevel - other.maxLevel;
else return minLevel - other.minLevel;
}
}
}
|