From: Jeff King <peff@peff.net>
To: Thomas Rast <tr@thomasrast.ch>
Cc: git@vger.kernel.org, "Vicent Martí" <vicent@github.com>
Subject: Re: [PATCH] Document khash
Date: Thu, 28 Nov 2013 05:35:55 -0500 [thread overview]
Message-ID: <20131128103555.GA14615@sigill.intra.peff.net> (raw)
In-Reply-To: <ccce08818b6856f67a5316eba148d5a860d1d8f7.1385391631.git.tr@thomasrast.ch>
On Mon, Nov 25, 2013 at 04:04:48PM +0100, Thomas Rast wrote:
> > I think I'll also lend you a hand writing Documentation/technical/api-khash.txt
> > (expect it tomorrow) so that we also have documentation in the git
> > style, where gitters can be expected to find it on their own.
>
> Here goes.
Thanks. Some comments below.
> > Furthermore, would it be a problem to name the second hash sha1_int
> > instead? I have another use for such a hash, and I can't imagine I'm
> > the only one. (That's not critical however, I can do the required
> > editing in that other series.)
>
> Actually, let's not do that. Since everything is 'static inline'
> anyway, there's no cost to simply instantiating more hashes as needed.
Yeah. If we cared about code duplication, we'd have to split it into
declaration and definition macros, and then collect the definitions in
one .c file (khash does support this, but we don't use it). I don't
think we are using enough repeated ones to make it matter, and most of
the functions benefit from inlining anyway.
> +------------
> +#import "khash.h"
> +KHASH_INIT(NAME, key_t, value_t, is_map, key_hash_fn, key_equal_fn)
> +------------
#import?
> +The arguments are as follows:
> [...]
> +`khint_t key_hash_fn(key_t)`::
> + Hash function.
It is true that this is a khint_t, but I do not think knowing that helps
the caller. They need to design a hash function, so knowing the size and
type of the hint helps. Maybe:
Return a hash value for a key. The khint_t is a 32-bit unsigned value.
Git provides __kh_oid_hash, which converts a sha1 into a hash value.
> +`int key_equal_fn(key_t a, key_t b)`::
> + Comparison function. Return 1 if the two keys are the same, 0
> + otherwise.
Here we provide __kh_oid_cmp, and we should mention it. Based on recent
discussions, this should probably be __kh_oid_equal, since it is not a
"cmp" function in the ordering sense.
> +`khint_t kh_get_NAME(const kh_NAME_t *hash, key_t key)`::
> + Find the given key in the hash table. The returned khint_t
> + should be treated as an opaque iterator token that indexes
> + into the hash. Use `kh_value` to get the value from the
> + token. If the key does not exist, returns kh_end(hash).
I do not know of the khash author's intention, but in the bitmap code we
prefer khiter_t to represent an iterator. It is the same as a khint_t,
but I think that is an implementation detail (and the khash functions
should probably be returning a khiter_t).
> [...]
The rest of it looks correct to me.
-Peff
next prev parent reply other threads:[~2013-11-28 10:36 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-14 12:41 [PATCH v3 0/21] pack bitmaps Jeff King
2013-11-14 12:42 ` [PATCH v3 01/21] sha1write: make buffer const-correct Jeff King
2013-11-14 12:42 ` [PATCH v3 02/21] revindex: Export new APIs Jeff King
2013-11-14 12:42 ` [PATCH v3 03/21] pack-objects: Refactor the packing list Jeff King
2013-11-14 12:43 ` [PATCH v3 04/21] pack-objects: factor out name_hash Jeff King
2013-11-14 12:43 ` [PATCH v3 05/21] revision: allow setting custom limiter function Jeff King
2013-11-14 12:43 ` [PATCH v3 06/21] sha1_file: export `git_open_noatime` Jeff King
2013-11-14 12:43 ` [PATCH v3 07/21] compat: add endianness helpers Jeff King
2013-11-14 12:43 ` [PATCH v3 08/21] ewah: compressed bitmap implementation Jeff King
2013-11-14 12:44 ` [PATCH v3 09/21] documentation: add documentation for the bitmap format Jeff King
2013-11-14 12:44 ` [PATCH v3 10/21] pack-bitmap: add support for bitmap indexes Jeff King
2013-11-24 21:36 ` Thomas Rast
2013-11-25 15:04 ` [PATCH] Document khash Thomas Rast
2013-11-28 10:35 ` Jeff King [this message]
2013-11-27 9:08 ` [PATCH v3 10/21] pack-bitmap: add support for bitmap indexes Karsten Blees
2013-11-28 10:38 ` Jeff King
2013-12-03 14:40 ` Karsten Blees
2013-12-03 18:21 ` Jeff King
2013-12-07 20:52 ` Karsten Blees
2013-11-29 21:21 ` Thomas Rast
2013-12-02 16:12 ` Jeff King
2013-12-02 20:36 ` Junio C Hamano
2013-12-02 20:47 ` Jeff King
2013-12-02 21:43 ` Junio C Hamano
2013-11-14 12:45 ` [PATCH v3 11/21] pack-objects: use bitmaps when packing objects Jeff King
2013-12-07 15:47 ` Thomas Rast
2013-12-21 13:15 ` Jeff King
2013-11-14 12:45 ` [PATCH v3 12/21] rev-list: add bitmap mode to speed up object lists Jeff King
2013-12-07 16:05 ` Thomas Rast
2013-11-14 12:45 ` [PATCH v3 13/21] pack-objects: implement bitmap writing Jeff King
2013-12-07 16:32 ` Thomas Rast
2013-12-21 13:17 ` Jeff King
2013-11-14 12:45 ` [PATCH v3 14/21] repack: stop using magic number for ARRAY_SIZE(exts) Jeff King
2013-12-07 16:34 ` Thomas Rast
2013-11-14 12:46 ` [PATCH v3 15/21] repack: turn exts array into array-of-struct Jeff King
2013-12-07 16:34 ` Thomas Rast
2013-11-14 12:46 ` [PATCH v3 16/21] repack: handle optional files created by pack-objects Jeff King
2013-12-07 16:35 ` Thomas Rast
2013-11-14 12:46 ` [PATCH v3 17/21] repack: consider bitmaps when performing repacks Jeff King
2013-12-07 16:37 ` Thomas Rast
2013-11-14 12:46 ` [PATCH v3 18/21] count-objects: recognize .bitmap in garbage-checking Jeff King
2013-12-07 16:38 ` Thomas Rast
2013-11-14 12:46 ` [PATCH v3 19/21] t: add basic bitmap functionality tests Jeff King
2013-12-07 16:43 ` Thomas Rast
2013-12-21 13:22 ` Jeff King
2013-11-14 12:48 ` [PATCH v3 20/21] t/perf: add tests for pack bitmaps Jeff King
2013-12-07 16:51 ` Thomas Rast
2013-12-21 13:40 ` Jeff King
2013-11-14 12:48 ` [PATCH v3 21/21] pack-bitmap: implement optional name_hash cache Jeff King
2013-12-07 16:59 ` Thomas Rast
2013-11-14 19:19 ` [PATCH v3 0/21] pack bitmaps Ramsay Jones
2013-11-14 21:33 ` Jeff King
2013-11-14 23:09 ` Ramsay Jones
2013-11-18 21:16 ` Ramsay Jones
2013-11-16 10:28 ` Thomas Rast
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131128103555.GA14615@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=tr@thomasrast.ch \
--cc=vicent@github.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).