01: package org.drools.common;
02:
03: /*
04: * Copyright 2005 JBoss Inc
05: *
06: * Licensed under the Apache License, Version 2.0 (the "License");
07: * you may not use this file except in compliance with the License.
08: * You may obtain a copy of the License at
09: *
10: * http://www.apache.org/licenses/LICENSE-2.0
11: *
12: * Unless required by applicable law or agreed to in writing, software
13: * distributed under the License is distributed on an "AS IS" BASIS,
14: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15: * See the License for the specific language governing permissions and
16: * limitations under the License.
17: */
18:
19: import org.drools.util.AbstractHashTable.ObjectComparator;
20:
21: public class EqualityKeyComparator implements ObjectComparator {
22: /**
23: *
24: */
25: private static final long serialVersionUID = 400L;
26:
27: private static EqualityKeyComparator instance;
28:
29: public static EqualityKeyComparator getInstance() {
30: if (EqualityKeyComparator.instance == null) {
31: EqualityKeyComparator.instance = new EqualityKeyComparator();
32: }
33:
34: return EqualityKeyComparator.instance;
35: }
36:
37: public int hashCodeOf(final Object key) {
38: return rehash(key.hashCode());
39: }
40:
41: public int rehash(int h) {
42: h += ~(h << 9);
43: h ^= (h >>> 14);
44: h += (h << 4);
45: h ^= (h >>> 10);
46: return h;
47: }
48:
49: /**
50: * Equality key reverses the compare, so that the key controls the comparison
51: */
52: public boolean equal(final Object o1, final Object o2) {
53: return (o1 == null) ? (o2 == null) : (o1 == o2)
54: || o2.equals(o1);
55: }
56:
57: public int compare(final Object o1, final Object o2) {
58: return ((Comparable) o1).compareTo(o2);
59: }
60:
61: public String toString() {
62: return "[EqualityKeyComparator]";
63: }
64: }
|