View Javadoc

1   /*******************************************************************************
2    * SAT4J: a SATisfiability library for Java Copyright (C) 2004-2008 Daniel Le Berre
3    *
4    * All rights reserved. This program and the accompanying materials
5    * are made available under the terms of the Eclipse Public License v1.0
6    * which accompanies this distribution, and is available at
7    * http://www.eclipse.org/legal/epl-v10.html
8    *
9    * Alternatively, the contents of this file may be used under the terms of
10   * either the GNU Lesser General Public License Version 2.1 or later (the
11   * "LGPL"), in which case the provisions of the LGPL are applicable instead
12   * of those above. If you wish to allow use of your version of this file only
13   * under the terms of the LGPL, and not to allow others to use your version of
14   * this file under the terms of the EPL, indicate your decision by deleting
15   * the provisions above and replace them with the notice and other provisions
16   * required by the LGPL. If you do not delete the provisions above, a recipient
17   * may use your version of this file under the terms of the EPL or the LGPL.
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  }