Expose LongMap in util package
This is a useful primitive collection type like IntList. Change-Id: I04b9b2ba25247df056eb3a1725602f1be6d3b440
This commit is contained in:
parent
40c9c59e07
commit
ed29dec1ea
|
@ -41,7 +41,7 @@
|
||||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.eclipse.jgit.transport;
|
package org.eclipse.jgit.util;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
|
@ -82,6 +82,7 @@
|
||||||
import org.eclipse.jgit.lib.ProgressMonitor;
|
import org.eclipse.jgit.lib.ProgressMonitor;
|
||||||
import org.eclipse.jgit.util.BlockList;
|
import org.eclipse.jgit.util.BlockList;
|
||||||
import org.eclipse.jgit.util.IO;
|
import org.eclipse.jgit.util.IO;
|
||||||
|
import org.eclipse.jgit.util.LongMap;
|
||||||
import org.eclipse.jgit.util.NB;
|
import org.eclipse.jgit.util.NB;
|
||||||
import org.eclipse.jgit.util.sha1.SHA1;
|
import org.eclipse.jgit.util.sha1.SHA1;
|
||||||
|
|
||||||
|
|
|
@ -41,15 +41,16 @@
|
||||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.eclipse.jgit.transport;
|
package org.eclipse.jgit.util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple Map<long,Object> helper for {@link PackParser}.
|
* Simple Map<long,Object>.
|
||||||
*
|
*
|
||||||
* @param <V>
|
* @param <V>
|
||||||
* type of the value instance.
|
* type of the value instance.
|
||||||
|
* @since 4.9
|
||||||
*/
|
*/
|
||||||
final class LongMap<V> {
|
public class LongMap<V> {
|
||||||
private static final float LOAD_FACTOR = 0.75f;
|
private static final float LOAD_FACTOR = 0.75f;
|
||||||
|
|
||||||
private Node<V>[] table;
|
private Node<V>[] table;
|
||||||
|
@ -60,16 +61,27 @@ final class LongMap<V> {
|
||||||
/** Next {@link #size} to trigger a {@link #grow()}. */
|
/** Next {@link #size} to trigger a {@link #grow()}. */
|
||||||
private int growAt;
|
private int growAt;
|
||||||
|
|
||||||
LongMap() {
|
/** Initialize an empty LongMap. */
|
||||||
|
public LongMap() {
|
||||||
table = createArray(64);
|
table = createArray(64);
|
||||||
growAt = (int) (table.length * LOAD_FACTOR);
|
growAt = (int) (table.length * LOAD_FACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean containsKey(final long key) {
|
/**
|
||||||
|
* @param key
|
||||||
|
* the key to find.
|
||||||
|
* @return {@code true} if {@code key} is present in the map.
|
||||||
|
*/
|
||||||
|
public boolean containsKey(long key) {
|
||||||
return get(key) != null;
|
return get(key) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
V get(final long key) {
|
/**
|
||||||
|
* @param key
|
||||||
|
* the key to find.
|
||||||
|
* @return stored value of the key, or {@code null}.
|
||||||
|
*/
|
||||||
|
public V get(long key) {
|
||||||
for (Node<V> n = table[index(key)]; n != null; n = n.next) {
|
for (Node<V> n = table[index(key)]; n != null; n = n.next) {
|
||||||
if (n.key == key)
|
if (n.key == key)
|
||||||
return n.value;
|
return n.value;
|
||||||
|
@ -77,7 +89,12 @@ V get(final long key) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
V remove(final long key) {
|
/**
|
||||||
|
* @param key
|
||||||
|
* key to remove from the map.
|
||||||
|
* @return old value of the key, or {@code null}.
|
||||||
|
*/
|
||||||
|
public V remove(long key) {
|
||||||
Node<V> n = table[index(key)];
|
Node<V> n = table[index(key)];
|
||||||
Node<V> prior = null;
|
Node<V> prior = null;
|
||||||
while (n != null) {
|
while (n != null) {
|
||||||
|
@ -95,7 +112,14 @@ V remove(final long key) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
V put(final long key, final V value) {
|
/**
|
||||||
|
* @param key
|
||||||
|
* key to store {@code value} under.
|
||||||
|
* @param value
|
||||||
|
* new value.
|
||||||
|
* @return prior value, or null.
|
||||||
|
*/
|
||||||
|
public V put(long key, V value) {
|
||||||
for (Node<V> n = table[index(key)]; n != null; n = n.next) {
|
for (Node<V> n = table[index(key)]; n != null; n = n.next) {
|
||||||
if (n.key == key) {
|
if (n.key == key) {
|
||||||
final V o = n.value;
|
final V o = n.value;
|
||||||
|
@ -145,9 +169,7 @@ private static final <V> Node<V>[] createArray(final int sz) {
|
||||||
|
|
||||||
private static class Node<V> {
|
private static class Node<V> {
|
||||||
final long key;
|
final long key;
|
||||||
|
|
||||||
V value;
|
V value;
|
||||||
|
|
||||||
Node<V> next;
|
Node<V> next;
|
||||||
|
|
||||||
Node(final long k, final V v) {
|
Node(final long k, final V v) {
|
Loading…
Reference in New Issue