src/core/ngx_murmurhash.c - nginx-1.7.10

Functions defined

Source code


  1. /*
  2. * Copyright (C) Austin Appleby
  3. */


  4. #include <ngx_config.h>
  5. #include <ngx_core.h>


  6. uint32_t
  7. ngx_murmur_hash2(u_char *data, size_t len)
  8. {
  9.     uint32_t  h, k;

  10.     h = 0 ^ len;

  11.     while (len >= 4) {
  12.         k  = data[0];
  13.         k |= data[1] << 8;
  14.         k |= data[2] << 16;
  15.         k |= data[3] << 24;

  16.         k *= 0x5bd1e995;
  17.         k ^= k >> 24;
  18.         k *= 0x5bd1e995;

  19.         h *= 0x5bd1e995;
  20.         h ^= k;

  21.         data += 4;
  22.         len -= 4;
  23.     }

  24.     switch (len) {
  25.     case 3:
  26.         h ^= data[2] << 16;
  27.     case 2:
  28.         h ^= data[1] << 8;
  29.     case 1:
  30.         h ^= data[0];
  31.         h *= 0x5bd1e995;
  32.     }

  33.     h ^= h >> 13;
  34.     h *= 0x5bd1e995;
  35.     h ^= h >> 15;

  36.     return h;
  37. }