Use pool id's for hash table key, lookup strings from pool as needed
authorPanu Matilainen <pmatilai@redhat.com>
Mon, 17 Sep 2012 12:52:59 +0000 (15:52 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Mon, 17 Sep 2012 12:52:59 +0000 (15:52 +0300)
commit1abd80f9c2a6d746bdc12d708210b69680d7e1ca
treec83c3ab58d852496c1b0647f68eb61bcb8f7e551
parent7cb0a71a115047fe94d7ab1bb42a3c9556796ee3
Use pool id's for hash table key, lookup strings from pool as needed

- The pool itself can address its contents by id alone, storing
  pointers to the strings only hurts as reallocation moving the
  data blob requires rehashing the whole thing needlessly.
- We now store just the key id in the hash buckets, and lookup the
  actual string for comparison from the pool. This avoids the
  need to rehash on realloc and saves memory too, and this is one of
  the biggest reasons for wanting a separate hash implementation for
  the string pool. Incidentally, this is how libsolv does it too.
- Individual bucket allocation becomes rather wasteful now: a bucket
  stores a single integer, and a single pointer to the next bucket,
  a pointer  which can be twice the size of the key data it holds.
  Further tuning and cleaning up after the marriage of these two
  datatypes left after the honeymoon is over...
rpmio/rpmstrpool.c