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, BigInteger w) {
51  		return new WeightedObject<E>(e, w);
52  	}
53  
54  	@Override
55  	public int hashCode() {
56  		final int prime = 31;
57  		int result = 1;
58  		result = prime * result + ((thing == null) ? 0 : thing.hashCode());
59  		result = prime * result + ((weight == null) ? 0 : weight.hashCode());
60  		return result;
61  	}
62  
63  	@Override
64  	public boolean equals(Object obj) {
65  		if (this == obj)
66  			return true;
67  		if (obj == null)
68  			return false;
69  		if (getClass() != obj.getClass())
70  			return false;
71  		WeightedObject<?> other = (WeightedObject<?>) obj;
72  		if (thing == null) {
73  			if (other.thing != null)
74  				return false;
75  		} else if (!thing.equals(other.thing))
76  			return false;
77  		if (weight == null) {
78  			if (other.weight != null)
79  				return false;
80  		} else if (!weight.equals(other.weight))
81  			return false;
82  		return true;
83  	}
84  }