diff options
author | Michael Bien <[email protected]> | 2010-04-15 00:00:46 +0200 |
---|---|---|
committer | Michael Bien <[email protected]> | 2010-04-15 00:00:46 +0200 |
commit | b33315789461b2db2406e9f91a828b4d899997a5 (patch) | |
tree | c06ccb4febd6c6598d2094a68d11e9787434456c /src/java/com/jogamp/common | |
parent | 74e0505c621c4573306675e0449e6dc73996eba1 (diff) |
merged LongInt with IntIntHashMap.
IntIntHashMap is now the single template used for all other maps.
Diffstat (limited to 'src/java/com/jogamp/common')
-rw-r--r-- | src/java/com/jogamp/common/util/IntIntHashMap.java | 28 | ||||
-rw-r--r-- | src/java/com/jogamp/common/util/LongIntHashMap.java | 199 |
2 files changed, 21 insertions, 206 deletions
diff --git a/src/java/com/jogamp/common/util/IntIntHashMap.java b/src/java/com/jogamp/common/util/IntIntHashMap.java index 6960161..f9b0f2d 100644 --- a/src/java/com/jogamp/common/util/IntIntHashMap.java +++ b/src/java/com/jogamp/common/util/IntIntHashMap.java @@ -30,13 +30,23 @@ */ package com.jogamp.common.util; +/* + * Note: this map is used as template for other maps. + */ + /** - * Fast HashMap for primitive data.. + * Fast HashMap for primitive data. Optimized for being GC friendly. * Original code is based on the <a href="http://code.google.com/p/skorpios/"> skorpios project</a> * released under new BSD license. + * * @author Michael Bien + * @author Simon Goller + * * @see IntObjectHashMap * @see IntLongHashMap + * @see LongObjectHashMap + * @see LongLongHashMap + * @see LongIntHashMap */ public class /*name*/IntIntHashMap/*name*/ { @@ -89,8 +99,9 @@ public class /*name*/IntIntHashMap/*name*/ { return false; } +// @SuppressWarnings(value="cast") public boolean containsKey(/*key*/int/*key*/ key) { - /*key*/int/*key*/ index = key & mask; + int index = (int) (key & mask); for (Entry e = table[index]; e != null; e = e.next) { if (e.key == key) { return true; @@ -99,8 +110,9 @@ public class /*name*/IntIntHashMap/*name*/ { return false; } +// @SuppressWarnings(value="cast") public /*value*/int/*value*/ get(/*key*/int/*key*/ key) { - int index = key & mask; + int index = (int) (key & mask); for (Entry e = table[index]; e != null; e = e.next) { if (e.key == key) { return e.value; @@ -109,8 +121,9 @@ public class /*name*/IntIntHashMap/*name*/ { return /*null*/0/*null*/; } +// @SuppressWarnings(value="cast") public /*value*/int/*value*/ put(/*key*/int/*key*/ key, /*value*/int/*value*/ value) { - int index = key & mask; + int index = (int) (key & mask); // Check if key already exists. for (Entry e = table[index]; e != null; e = e.next) { if (e.key != key) { @@ -126,14 +139,14 @@ public class /*name*/IntIntHashMap/*name*/ { int newCapacity = 2 * capacity; Entry[] newTable = new Entry[newCapacity]; Entry[] src = table; - int bucketmask = newCapacity - 1; + /*key*/int/*key*/ bucketmask = newCapacity - 1; for (int j = 0; j < src.length; j++) { Entry e = src[j]; if (e != null) { src[j] = null; do { Entry next = e.next; - index = e.key & bucketmask; + index = (int) (e.key & bucketmask); e.next = newTable[index]; newTable[index] = e; e = next; @@ -148,8 +161,9 @@ public class /*name*/IntIntHashMap/*name*/ { return /*null*/0/*null*/; } +// @SuppressWarnings(value="cast") public /*value*/int/*value*/ remove(/*key*/int/*key*/ key) { - int index = key & mask; + int index = (int) (key & mask); Entry prev = table[index]; Entry e = prev; while (e != null) { diff --git a/src/java/com/jogamp/common/util/LongIntHashMap.java b/src/java/com/jogamp/common/util/LongIntHashMap.java deleted file mode 100644 index e17155d..0000000 --- a/src/java/com/jogamp/common/util/LongIntHashMap.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (c) 2010, Michael Bien - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of JogAmp nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Michael Bien BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Created on Sunday, March 28 2010 21:01 - */ -package com.jogamp.common.util; - -/** - * Fast HashMap for primitive data.. - * Original code is based on the <a href="http://code.google.com/p/skorpios/"> skorpios project</a> - * released under new BSD license. - * @author Michael Bien - * @author Simon Goller - * @see IntObjectHashMap - * @see IntLongHashMap - * @see LongObjectHashMap - * @see LongLongHashMap - */ -public class /*name*/LongIntHashMap/*name*/ { - - private final float loadFactor; - - private Entry[] table; - - private int size; - private int mask; - private int capacity; - private int threshold; - - public /*name*/LongIntHashMap/*name*/() { - this(16, 0.75f); - } - - public /*name*/LongIntHashMap/*name*/(int initialCapacity) { - this(initialCapacity, 0.75f); - } - - public /*name*/LongIntHashMap/*name*/(int initialCapacity, float loadFactor) { - if (initialCapacity > 1 << 30) { - throw new IllegalArgumentException("initialCapacity is too large."); - } - if (initialCapacity < 0) { - throw new IllegalArgumentException("initialCapacity must be greater than zero."); - } - if (loadFactor <= 0) { - throw new IllegalArgumentException("initialCapacity must be greater than zero."); - } - capacity = 1; - while (capacity < initialCapacity) { - capacity <<= 1; - } - this.loadFactor = loadFactor; - this.threshold = (int) (capacity * loadFactor); - this.table = new Entry[capacity]; - this.mask = capacity - 1; - } - - public boolean containsValue(/*value*/int/*value*/ value) { - Entry[] table = this.table; - for (int i = table.length; i-- > 0;) { - for (Entry e = table[i]; e != null; e = e.next) { - if (e.value == value) { - return true; - } - } - } - return false; - } - - public boolean containsKey(/*key*/long/*key*/ key) { - /*key*/int/*key*/ index = (int) (key & mask); - for (Entry e = table[index]; e != null; e = e.next) { - if (e.key == key) { - return true; - } - } - return false; - } - - public /*value*/int/*value*/ get(/*key*/long/*key*/ key) { - int index = (int) (key & mask); - for (Entry e = table[index]; e != null; e = e.next) { - if (e.key == key) { - return e.value; - } - } - return /*null*/0/*null*/; - } - - public /*value*/int/*value*/ put(/*key*/long/*key*/ key, /*value*/int/*value*/ value) { - int index = (int) (key & mask); - // Check if key already exists. - for (Entry e = table[index]; e != null; e = e.next) { - if (e.key != key) { - continue; - } - /*value*/int/*value*/ oldValue = e.value; - e.value = value; - return oldValue; - } - table[index] = new Entry(key, value, table[index]); - if (size++ >= threshold) { - // Rehash. - int newCapacity = 2 * capacity; - Entry[] newTable = new Entry[newCapacity]; - Entry[] src = table; - long bucketmask = newCapacity - 1; - for (int j = 0; j < src.length; j++) { - Entry e = src[j]; - if (e != null) { - src[j] = null; - do { - Entry next = e.next; - index = (int) (e.key & bucketmask); - e.next = newTable[index]; - newTable[index] = e; - e = next; - } while (e != null); - } - } - table = newTable; - capacity = newCapacity; - threshold = (int) (newCapacity * loadFactor); - mask = capacity - 1; - } - return /*null*/0/*null*/; - } - - public /*value*/int/*value*/ remove(/*key*/long/*key*/ key) { - int index = (int) (key & mask); - Entry prev = table[index]; - Entry e = prev; - while (e != null) { - Entry next = e.next; - if (e.key == key) { - size--; - if (prev == e) { - table[index] = next; - } else { - prev.next = next; - } - return e.value; - } - prev = e; - e = next; - } - return /*null*/0/*null*/; - } - - public int size() { - return size; - } - - public void clear() { - Entry[] table = this.table; - for (int index = table.length; --index >= 0;) { - table[index] = null; - } - size = 0; - } - - private final static class Entry { - - private final /*key*/long/*key*/ key; - private /*value*/int/*value*/ value; - private Entry next; - - private Entry(/*key*/long/*key*/ k, /*value*/int/*value*/ v, Entry n) { - key = k; - value = v; - next = n; - } - } -} |