I've definitely seen cases of the hash function being passed in as key->hash(). If that's the case, then the templated hash function could, for example, look up the hash on the key object.
On Thu, Sep 15, 2016 at 9:43 AM, 'Ross McIlroy' via v8-dev < v8-dev@googlegroups.com> wrote: > On 15 Sep 2016 9:29 a.m., <lesz...@chromium.org> wrote: > > > > Hi all, > > > > We (ignition) are looking to use base/hashmap (TemplateHashMap), but > there are a couple of things that I want to change/add for efficiency's > sake. Because these changes would have far-reaching effects, I wanted to > send out the proposed changes before trying to upload any CLs. > > > > My proposed changes are: > > Template the value type, so that small types (e.g. ints) can be stored > inline rather than allocated > > Template the key type, for the same reason > > This has some far reaching effects -- e.g. we can't store holes as > nullptr keys anymore, but have to have a separate boolean existence flag. I > suggest that we have an Entry class that is templated on the key, and > specialised for pointer-typed keys to treat null keys as holes. > > Template the hash function and remove the hash fields, because passing > in our own hash values is asking for trouble > > AFAIK the hash arguments are used by the ast-value-factory such that AST > value objects stores their hash as a field and pass it to lookups to avoid > having to rehash the AST values. We would want something like this for any > replacement. It might be possible to store the cached hash files on the > hashmap entries themselves, but maybe there is some another reason we > currently have them on the AST values. > > Marja, any thoughts? > > > Template the equals/matching function, since we'd be having to template > it on the key type anyway, to skip that dereference > > Move the allocator to a field, because passing different allocators > around as parameters is super sketchy > > More precisely, move it to a private base class to take advantage of the > empty base-class optimisation > > Add a function argument to LookupOrInsert which creates the value, since > the Value type is templated and so we can't rely on null values to mean > newly-inserted entries > > And maybe, though I'm less convinced about these: > > Return value references directly for Lookup/LookupOrInsert, rather than > Entries, to make Entries non-public > > Add an stl-like iterator interface rather than Start/Next, also to make > Entries non-public > > Most of these I could wrap in a particular <Key=void*, Value=void*> > implementation that would fairly closely imitate the original hash map, but > there would (probably?) still be some differences. > > > > Comments/questions/rage? > > > > - Leszek > > > > -- > > -- > > v8-dev mailing list > > v8-dev@googlegroups.com > > http://groups.google.com/group/v8-dev > > --- > > You received this message because you are subscribed to the Google > Groups "v8-dev" group. > > To unsubscribe from this group and stop receiving emails from it, send > an email to v8-dev+unsubscr...@googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > > -- > -- > v8-dev mailing list > v8-dev@googlegroups.com > http://groups.google.com/group/v8-dev > --- > You received this message because you are subscribed to the Google Groups > "v8-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to v8-dev+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- -- v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.