Reverse pack index implementation: PackReverseIndex
commit8993eed59a9f2f3b16774e19b46646f8f3aed171
authorMarek Zawirski <marek.zawirski@gmail.com>
Mon, 9 Jun 2008 18:03:06 +0000 (9 20:03 +0200)
committerRobin Rosenberg <robin.rosenberg@dewire.com>
Sat, 28 Jun 2008 09:55:58 +0000 (28 11:55 +0200)
tree4c07a130d3a8bec060d07c75fb16407a1c3a3ab2
parent5a1ad91ea030da3005daca072e688ec0aa0d540a
Reverse pack index implementation: PackReverseIndex

Let us quickly find ObjectId or next object for specified offset in a
pack, in O(log n) time.

Current implementation uses one level (reverse) indexing by an offset.
However, it tries to take small space as possible, by using 2 distinct
offset arrays for offsets with value smaller than 2^31 (int[]) and those
with value bigger than 2^31 (long[]). Offsets are stored ordered in
these 2 arrays.
Binary search search is performed during requests, then index in offsets
array is applied as index to the array of positions in straight
PackIndex, which finally gives ObjectId.

Reverse index is constructed from an existing PackIndex instance, by
lazy initialization in a PackFile instance.

Optimization-hacks-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Marek Zawirski <marek.zawirski@gmail.com>
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java
org.spearce.jgit/src/org/spearce/jgit/lib/PackIndex.java
org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java
org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java
org.spearce.jgit/src/org/spearce/jgit/lib/PackReverseIndex.java [new file with mode: 0644]