diff options
author | Jonathan Tan <jonathantanmy@google.com> | 2018-02-13 19:39:39 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-02-15 22:08:55 +0100 |
commit | b4e00f7306a160639f047b3421985e8f3d0c6fb1 (patch) | |
tree | f5c1c3ffba403ad4bb1e25bac7e4f2a943a313cf /packfile.c | |
parent | packfile: remove GIT_DEBUG_LOOKUP log statements (diff) | |
download | git-b4e00f7306a160639f047b3421985e8f3d0c6fb1.tar.xz git-b4e00f7306a160639f047b3421985e8f3d0c6fb1.zip |
packfile: refactor hash search with fanout table
Subsequent patches will introduce file formats that make use of a fanout
array and a sorted table containing hashes, just like packfiles.
Refactor the hash search in packfile.c into its own function, so that
those patches can make use of it as well.
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'packfile.c')
-rw-r--r-- | packfile.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/packfile.c b/packfile.c index 58bdced3b1..59648a1820 100644 --- a/packfile.c +++ b/packfile.c @@ -1712,7 +1712,8 @@ off_t find_pack_entry_one(const unsigned char *sha1, { const uint32_t *level1_ofs = p->index_data; const unsigned char *index = p->index_data; - unsigned hi, lo, stride; + unsigned stride; + uint32_t result; if (!index) { if (open_pack_index(p)) @@ -1725,8 +1726,6 @@ off_t find_pack_entry_one(const unsigned char *sha1, index += 8; } index += 4 * 256; - hi = ntohl(level1_ofs[*sha1]); - lo = ((*sha1 == 0x0) ? 0 : ntohl(level1_ofs[*sha1 - 1])); if (p->index_version > 1) { stride = 20; } else { @@ -1734,17 +1733,8 @@ off_t find_pack_entry_one(const unsigned char *sha1, index += 4; } - while (lo < hi) { - unsigned mi = lo + (hi - lo) / 2; - int cmp = hashcmp(index + mi * stride, sha1); - - if (!cmp) - return nth_packed_object_offset(p, mi); - if (cmp > 0) - hi = mi; - else - lo = mi+1; - } + if (bsearch_hash(sha1, level1_ofs, index, stride, &result)) + return nth_packed_object_offset(p, result); return 0; } |