message: indexgenerator: Refactor hasher interface
  Since we don't need the hasher to stay compatible with std:: interface,
  change operator() to use methods with readable names.
  Also inline hashing function and fix comparison return type (should be
  bool, not size_t).
diff: namespace meshopt
  {
  -static unsigned int murmurHash(const char* key, size_t len, unsigned int h)
  +struct VertexHasher
  {
  + const char* vertices;
  + size_t vertex_size;
  +
  + size_t hash(unsigned int index) const
  + {
  + // MurmurHash2
  const unsigned int m = 0x5bd1e995;
  const int r = 24;
  + unsigned int h = 0;
  + const char* key = vertices + index * vertex_size;
  + size_t len = vertex_size;
  +
  while (len >= 4)
  {
  unsigned int k = *reinterpret_cast<const unsigned int*>(key);
  @@ -30,17 +40,7 @@ static unsigned int murmurHash(const char* key, size_t len, unsigned int h)
  return h;
  }
  -struct VertexHasher
  -{
  - const char* vertices;
  - size_t vertex_size;
  -
  - size_t operator()(unsigned int index) const
  - {
  - return murmurHash(vertices + index * vertex_size, vertex_size, 0);
  - }
  -
  - size_t operator()(unsigned int lhs, unsigned int rhs) const
  + bool equal(unsigned int lhs, unsigned int rhs) const
  {
  return memcmp(vertices + lhs * vertex_size, vertices + rhs * vertex_size, vertex_size) == 0;
  }
  @@ -62,7 +62,7 @@ static T* hashLookup(T* table, size_t buckets, const Hash& hash, const T& key, c
  assert((buckets & (buckets - 1)) == 0);
  size_t hashmod = buckets - 1;
  - size_t bucket = hash(key) & hashmod;
  + size_t bucket = hash.hash(key) & hashmod;
  for (size_t probe = 0; probe <= hashmod; ++probe)
  {
  @@ -71,7 +71,7 @@ static T* hashLookup(T* table, size_t buckets, const Hash& hash, const T& key, c
  if (item == empty)
  return &item;
  - if (hash(item, key))
  + if (hash.equal(item, key))
  return &item;
  // hash collision, quadratic probing
  