RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
MutableNumber.java
1package com.osroyale.util;
2
3import java.util.concurrent.atomic.AtomicInteger;
4
41
42* The container class that contains functions to simplify the modification of a
43 * number.
44 * <p>
45 * <p>
46 * This class is similar in functionality to {@link AtomicInteger} but does not
47 * support atomic operations, and therefore should not be used across multiple
48 * threads.
49 *
50 * @author lare96 <http://github.com/lare96>
51 */
52public final class MutableNumber extends Number implements Comparable<MutableNumber> {
53
57 private static final long serialVersionUID = -7475363158492415879L;
58
62 private int value;
63
70 public MutableNumber(int value) {
71 this.value = value;
72 }
73
77 public MutableNumber() {
78 this(0);
79 }
80
81 @Override
82 public String toString() {
83 return Integer.toString(value);
84 }
85
86 @Override
87 public int hashCode() {
88 return Integer.hashCode(value);
89 }
90
91 @Override
92 public boolean equals(Object obj) {
93 if (this == obj)
94 return true;
95 if (obj == null)
96 return false;
97 if (!(obj instanceof MutableNumber))
98 return false;
99 MutableNumber other = (MutableNumber) obj;
100 return value == other.value;
101 }
102
103 @Override
104 public int compareTo(MutableNumber o) {
105 return Integer.compare(value, o.value);
106 }
107
113 @Override
114 public int intValue() {
115 return value;
116 }
117
118 @Override
119 public long longValue() {
120 return (long) value;
121 }
122
123 @Override
124 public float floatValue() {
125 return (float) value;
126 }
127
128 @Override
129 public double doubleValue() {
130 return (double) value;
131 }
132
143 public int getAndIncrement(int amount, int maximum) {
144 int val = value;
145 value += amount;
146 if (value > maximum)
147 value = maximum;
148 return val;
149 }
150
159 public int getAndIncrement(int amount) {
160 return getAndIncrement(amount, Integer.MAX_VALUE);
161 }
162
169 public int getAndIncrement() {
170 return getAndIncrement(1);
171 }
172
183 public int incrementAndGet(int amount, int maximum) {
184 value += amount;
185 if (value > maximum)
186 value = maximum;
187 return value;
188 }
189
198 public int incrementAndGet(int amount) {
199 return incrementAndGet(amount, Integer.MAX_VALUE);
200 }
201
208 public int incrementAndGet() {
209 return incrementAndGet(1);
210 }
211
218 public MutableNumber increment() {
219 incrementAndGet(1);
220 return this;
221 }
222
233 public int getAndDecrement(int amount, int minimum) {
234 int val = value;
235 value -= amount;
236 if (value < minimum)
237 value = minimum;
238 return val;
239 }
240
249 public int getAndDecrement(int amount) {
250 return getAndDecrement(amount, Integer.MIN_VALUE);
251 }
252
259 public int getAndDecrement() {
260 return getAndDecrement(1);
261 }
262
273 public int decrementAndGet(int amount, int minimum) {
274 value -= amount;
275 if (value < minimum)
276 value = minimum;
277 return value;
278 }
279
288 public int decrementAndGet(int amount) {
289 return decrementAndGet(amount, Integer.MIN_VALUE);
290 }
291
298 public int decrementAndGet() {
299 return decrementAndGet(1);
300 }
301
308 public int get() {
309 return value;
310 }
311
318 public void set(int value) {
319 this.value = value;
320 }
321}