summaryrefslogtreecommitdiff
path: root/pack-objects.h
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2013-10-24 14:01:29 -0400
committerJunio C Hamano <gitster@pobox.com>2013-10-24 15:44:52 -0700
commit68fb36eb92ff98ec81a066592a07b3f411450a1d (patch)
tree77bd96a2c222971d2e2846001bf73ed835bca8da /pack-objects.h
parent2834bc27c16e4ae103768dd6dda530f0e46116af (diff)
downloadgit-68fb36eb92ff98ec81a066592a07b3f411450a1d.tar.gz
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.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/pack-objects.h b/pack-objects.h
index f5282155f2..90ad0a8f4f 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