On Thu, Jun 20, 2019 at 10:44:17AM -0700, Junio C Hamano wrote: > Jeff King <peff@xxxxxxxx> writes: > > > For use in object_id hash tables, we have oid_hash() and oid_equal(). > > But these are confusingly similar to the existing oideq() and the > > oidhash() we plan to add to replace sha1hash(). > > > > The big difference from those functions is that rather than accepting a > > const pointer to the "struct object_id", we take the arguments by value > > (which is a khash internal convention). So let's make that obvious by > > calling them oidhash_by_value() and oideq_by_value(). > > > > Those names are fairly horrendous to type, but we rarely need to do so; > > they are passed to the khash implementation macro and then only used > > internally. Callers get to use the nice kh_put_oid_map(), etc. > > The pass-by-value interface feels a bit unforunate but hopefully > "static inline" would help us avoid actually copying the struct left > and right as we make calls to them X-<. Yeah, exactly. I think it should end up quite fast, though if anybody (René?) wants to try tweaking khash and timing it, be my guest. I do think if it took the more usual pass-by-const-pointer we'd probably still end up with the exact same code from an optimizing compiler, since all of the references and dereferences would cancel out once it was inlined. -Peff