diff options
author | Vicent Marti <tanoku@gmail.com> | 2013-10-24 14:01:29 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-10-24 15:44:52 -0700 |
commit | 68fb36eb92ff98ec81a066592a07b3f411450a1d (patch) | |
tree | 77bd96a2c222971d2e2846001bf73ed835bca8da /pack-objects.h | |
parent | 2834bc27c16e4ae103768dd6dda530f0e46116af (diff) | |
download | git-68fb36eb92ff98ec81a066592a07b3f411450a1d.tar.gz git-68fb36eb92ff98ec81a066592a07b3f411450a1d.tar.xz |
pack-objects: factor out name_hash
As the pack-objects system grows beyond the single
pack-objects.c file, more parts (like the soon-to-exist
bitmap code) will need to compute hashes for matching
deltas. Factor out name_hash to make it available to other
files.
Signed-off-by: Vicent Marti <tanoku@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'pack-objects.h')
-rw-r--r-- | pack-objects.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/pack-objects.h b/pack-objects.h index f5282155f..90ad0a8f4 100644 --- a/pack-objects.h +++ b/pack-objects.h @@ -44,4 +44,24 @@ struct object_entry *packlist_find(struct packing_data *pdata, const unsigned char *sha1, uint32_t *index_pos); +static inline uint32_t pack_name_hash(const char *name) +{ + uint32_t c, hash = 0; + + if (!name) + return 0; + + /* + * This effectively just creates a sortable number from the + * last sixteen non-whitespace characters. Last characters + * count "most", so things that end in ".c" sort together. + */ + while ((c = *name++) != 0) { + if (isspace(c)) + continue; + hash = (hash >> 2) + (c << 24); + } + return hash; +} + #endif |