From: Marek Zawirski Date: Sun, 15 Jun 2008 21:45:36 GMT Subject: [EGIT PATCH 07/20] Refactor PackIndexV2 - extract binarySearchLevelTwo() Message-ID: <1213566349-25395-8-git-send-email-marek.zawirski@gmail.com> In-Reply-To: <1213566349-25395-7-git-send-email-marek.zawirski@gmail.com> Signed-off-by: Marek Zawirski --- .../src/org/spearce/jgit/lib/PackIndexV2.java | 23 +++++++++++++------- 1 files changed, 15 insertions(+), 8 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java index ae70f11..a0b9827 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java @@ -153,6 +153,20 @@ class PackIndexV2 extends PackIndex { @Override long findOffset(final AnyObjectId objId) { final int levelOne = objId.getFirstByte(); + final int levelTwo = binarySearchLevelTwo(objId, levelOne); + if (levelTwo == -1) + return -1; + final long p = NB.decodeUInt32(offset32[levelOne], levelTwo << 2); + if ((p & IS_O64) != 0) + return NB.decodeUInt64(offset64, (8 * (int) (p & ~IS_O64))); + return p; + } + + public Iterator iterator() { + return new EntriesIteratorV2(); + } + + private int binarySearchLevelTwo(final AnyObjectId objId, final int levelOne) { final int[] data = names[levelOne]; int high = offset32[levelOne].length >> 2; if (high == 0) @@ -167,20 +181,13 @@ class PackIndexV2 extends PackIndex { if (cmp < 0) high = mid; else if (cmp == 0) { - final long p = NB.decodeUInt32(offset32[levelOne], mid4); - if ((p & IS_O64) != 0) - return NB.decodeUInt64(offset64, (8 * (int) (p & ~IS_O64))); - return p; + return mid; } else low = mid + 1; } while (low < high); return -1; } - public Iterator iterator() { - return new EntriesIteratorV2(); - } - private class EntriesIteratorV2 extends EntriesIterator { private int levelOne; -- 1.5.5.1