Fixes null captured parameters
[jpf-core.git] / src / main / gov / nasa / jpf / util / HashData.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The Java Pathfinder core (jpf-core) platform is licensed under the
7  * Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  * 
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 package gov.nasa.jpf.util;
19
20 /**
21  * object to compute complex hash values that can be accumulated and
22  * delegated (to aggregates etc.)
23  * used to obtain hashcodes for states
24  */
25 public class HashData {
26   private static final int poly = 0x88888EEF;
27   private int m = -1;
28
29   public void reset() {
30     m = -1;
31   }
32   
33   public int getValue () {
34     return (m >>> 4) ^ (m & 15);
35   }
36
37   public void add (int value) {
38     if (m < 0) {
39       m += m;
40       m ^= poly;
41     } else {
42       m += m;
43     }
44
45     m ^= value;
46   }
47
48   public void add (long value){
49     add((int)(value ^ (value >>> 32)));
50   }
51
52   public void add (Object o) {
53     if (o != null) {
54       add(o.hashCode());
55     }
56   }
57   
58   public void add (boolean b) {
59     // a clear case of '42', but that's the "official" boolean hashing
60     add(b ? 1231 : 1237);
61   }
62 }