Browse Source

Merge "ObjectIdSubclassMap: Micro-optimize wrapping at end of table"

stable-0.12
Shawn O. Pearce 14 years ago committed by Code Review
parent
commit
b4f2913556
  1. 24
      org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectIdSubclassMap.java

24
org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectIdSubclassMap.java

@ -92,16 +92,15 @@ public class ObjectIdSubclassMap<V extends ObjectId> implements Iterable<V> {
* @return the instance mapped to toFind, or null if no mapping exists. * @return the instance mapped to toFind, or null if no mapping exists.
*/ */
public V get(final AnyObjectId toFind) { public V get(final AnyObjectId toFind) {
int i = toFind.w1 & mask; final int msk = mask;
int i = toFind.w1 & msk;
final V[] tbl = table; final V[] tbl = table;
final int end = tbl.length;
V obj; V obj;
while ((obj = tbl[i]) != null) { while ((obj = tbl[i]) != null) {
if (AnyObjectId.equals(obj, toFind)) if (AnyObjectId.equals(obj, toFind))
return obj; return obj;
if (++i == end) i = (i + 1) & msk;
i = 0;
} }
return null; return null;
} }
@ -157,16 +156,15 @@ public class ObjectIdSubclassMap<V extends ObjectId> implements Iterable<V> {
* type of instance to store. * type of instance to store.
*/ */
public <Q extends V> V addIfAbsent(final Q newValue) { public <Q extends V> V addIfAbsent(final Q newValue) {
int i = newValue.w1 & mask; final int msk = mask;
int i = newValue.w1 & msk;
final V[] tbl = table; final V[] tbl = table;
final int end = tbl.length;
V obj; V obj;
while ((obj = tbl[i]) != null) { while ((obj = tbl[i]) != null) {
if (AnyObjectId.equals(obj, newValue)) if (AnyObjectId.equals(obj, newValue))
return obj; return obj;
if (++i == end) i = (i + 1) & msk;
i = 0;
} }
if (++size == grow) { if (++size == grow) {
@ -218,13 +216,11 @@ public class ObjectIdSubclassMap<V extends ObjectId> implements Iterable<V> {
} }
private void insert(final V newValue) { private void insert(final V newValue) {
int j = newValue.w1 & mask; final int msk = mask;
int j = newValue.w1 & msk;
final V[] tbl = table; final V[] tbl = table;
final int end = tbl.length; while (tbl[j] != null)
while (tbl[j] != null) { j = (j + 1) & msk;
if (++j == end)
j = 0;
}
tbl[j] = newValue; tbl[j] = newValue;
} }

Loading…
Cancel
Save