Nginx 소스 코드 완전 주석 (6) core / murmurhash

6636 단어
더 읽 기
Nginx 소스 코드 완전 주석 (6) murmurhash
저자: 유 대 · Poechant (종 초) 메 일 박스: zhongchao. ustc \ # gmail. com (\ # - > @) 블 로그: 블 로그. CSDN. net / Poechant 날짜: August 18th, 2012 MurmurHash2 was written by Austin Appleby, and is placed in the public domain. The author hereby disclaims copyright to this source code.
다음은 Google Code 에서 따 온 Murmurhash 오픈 소스 프로젝트 홈 페이지 의 Murmurhash 2 입 니 다. Nginx 는 이 를 사용 합 니 다.

uint32_t MurmurHash2 ( const void * key, int len, uint32_t seed )
{
  // 'm' and 'r' are mixing constants generated offline.
  // They're not really 'magic', they just happen to work well.

  const uint32_t m = 0x5bd1e995;
  const int r = 24;

  // Initialize the hash to a 'random' value

  uint32_t h = seed ^ len;

  // Mix 4 bytes at a time into the hash

  const unsigned char * data = (const unsigned char *)key;

  while(len >= 4)
  {
    uint32_t k = *(uint32_t*)data;

    k *= m;
    k ^= k >> r;
    k *= m;

    h *= m;
    h ^= k;

    data += 4;
    len -= 4;
  }

  // Handle the last few bytes of the input array

  switch(len)
  {
  case 3: h ^= data[2] << 16;
  case 2: h ^= data[1] << 8;
  case 1: h ^= data[0];
      h *= m;
  };

  // Do a few final mixes of the hash to ensure the last few
  // bytes are well-incorporated.

  h ^= h >> 13;
  h *= m;
  h ^= h >> 15;

  return h;
} 

다음은 Nginx 에서 Murmurhash 의 소스 코드 로 위 와 다 름 이 없습니다.

uint32_t
ngx_murmur_hash2(u_char *data, size_t len)
{
    uint32_t  h, k;

    h = 0 ^ len;

    while (len >= 4) {
        k  = data[0];
        k |= data[1] << 8;
        k |= data[2] << 16;
        k |= data[3] << 24;

        k *= 0x5bd1e995;
        k ^= k >> 24;
        k *= 0x5bd1e995;

        h *= 0x5bd1e995;
        h ^= k;

        data += 4;
        len -= 4;
    }

    switch (len) {
    case 3:
        h ^= data[2] << 16;
    case 2:
        h ^= data[1] << 8;
    case 1:
        h ^= data[0];
        h *= 0x5bd1e995;
    }

    h ^= h >> 13;
    h *= 0x5bd1e995;
    h ^= h >> 15;

    return h;
}

Reference
Murmurhash2
-
유 대 Poechant (종 초 Michael) 의 CSDN 블 로 그 를 옮 겨 주세요.
종 초 마 이 클 의 블 로그: Blog. CSDN. net / Poechant
종 초 마 이 클 의 웨 이 보: 종 초 마 이 클 의 시 나 웨 이 보
-

좋은 웹페이지 즐겨찾기