aboutsummaryrefslogtreecommitdiffstats
path: root/src/javax/media/j3d/J3dHash.java
blob: 5db043770fed479dc7e159606bfe76cf0cf7535a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
 * Copyright 2013 Harvey Harrison <harvey.harrison@gmail.com>
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 */
package javax.media.j3d;

/**
 * A Utility class wrapping the approach used to hash double values in Java3D
 */
class J3dHash {

// prevent an instance from actually being created
private J3dHash() {}

/**
 * Mix the given double into the provided long hash.
 */
static final long mixDoubleBits(long hash, double d) {
	hash *= 31L;
	// Treat 0.0d and -0.0d the same (all zero bits)
	if (d == 0.0d)
		return hash;

	return hash + Double.doubleToLongBits(d);
}

/**
 * Return an integer hash from a long by mixing it with itself.
 */
static final int finish(long hash) {
	return (int)(hash ^ (hash >> 32));
}
}