1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.sat4j.pb.tools;
21
22 import java.math.BigInteger;
23
24 public class WeightedObject<T> implements Comparable<WeightedObject<T>> {
25
26 public final T thing;
27 private BigInteger weight;
28
29 private WeightedObject(T thing, BigInteger weight) {
30 this.thing = thing;
31 this.weight = weight;
32 }
33
34 public BigInteger getWeight() {
35 return weight;
36 }
37
38 public void increaseWeight(BigInteger delta) {
39 weight = weight.add(delta);
40 }
41
42 public int compareTo(WeightedObject<T> arg0) {
43 return weight.compareTo(arg0.getWeight());
44 }
45
46 public static <E> WeightedObject<E> newWO(E e, int w) {
47 return new WeightedObject<E>(e, BigInteger.valueOf(w));
48 }
49
50 public static <E> WeightedObject<E> newWO(E e, long w) {
51 return new WeightedObject<E>(e, BigInteger.valueOf(w));
52 }
53
54 public static <E> WeightedObject<E> newWO(E e, BigInteger w) {
55 return new WeightedObject<E>(e, w);
56 }
57
58 @Override
59 public int hashCode() {
60 final int prime = 31;
61 int result = 1;
62 result = prime * result + ((thing == null) ? 0 : thing.hashCode());
63 result = prime * result + ((weight == null) ? 0 : weight.hashCode());
64 return result;
65 }
66
67 @Override
68 public boolean equals(Object obj) {
69 if (this == obj)
70 return true;
71 if (obj == null)
72 return false;
73 if (getClass() != obj.getClass())
74 return false;
75 WeightedObject<?> other = (WeightedObject<?>) obj;
76 if (thing == null) {
77 if (other.thing != null)
78 return false;
79 } else if (!thing.equals(other.thing))
80 return false;
81 if (weight == null) {
82 if (other.weight != null)
83 return false;
84 } else if (!weight.equals(other.weight))
85 return false;
86 return true;
87 }
88 }