提供了x86和新x64两个平台上生成64位MurmurHash的算法

#ifndef MURMURHASH_H_INCLUDED
#define MURMURHASH_H_INCLUDED// 64-bit hash for 64-bit platforms
uint64_t MurmurHash64A (const void * key, int len, unsigned int seed)
{const uint64_t m = 0xc6a4a7935bd1e995;const int r = 47;uint64_t h = seed ^ (len * m);const uint64_t * data = (const uint64_t *)key;const uint64_t * end = data + (len/8);while (data != end){uint64_t k = *data++;k *= m;k ^= k >> r;k *= m;h ^= k;h *= m;}const unsigned char * data2 = (const unsigned char*)data;switch (len & 7){case 7: h ^= uint64_t(data2[6]) << 48;case 6: h ^= uint64_t(data2[5]) << 40;case 5: h ^= uint64_t(data2[4]) << 32;case 4: h ^= uint64_t(data2[3]) << 24;case 3: h ^= uint64_t(data2[2]) << 16;case 2: h ^= uint64_t(data2[1]) << 8;case 1: h ^= uint64_t(data2[0]);h *= m;};h ^= h >> r;h *= m;h ^= h >> r;return h;
}// 64-bit hash for 32-bit platforms
uint64_t MurmurHash64B ( const void * key, int len, unsigned int seed )
{const unsigned int m = 0x5bd1e995;const int r = 24;unsigned int h1 = seed ^ len;unsigned int h2 = 0;const unsigned int * data = (const unsigned int *)key;while (len >= 8){unsigned int k1 = *data++;k1 *= m; k1 ^= k1 >> r; k1 *= m;h1 *= m; h1 ^= k1;len -= 4;unsigned int k2 = *data++;k2 *= m; k2 ^= k2 >> r; k2 *= m;h2 *= m; h2 ^= k2;len -= 4;}if (len >= 4){unsigned int k1 = *data++;k1 *= m; k1 ^= k1 >> r; k1 *= m;h1 *= m; h1 ^= k1;len -= 4;}switch(len){case 3: h2 ^= ((unsigned char*)data)[2] << 16;case 2: h2 ^= ((unsigned char*)data)[1] << 8;case 1: h2 ^= ((unsigned char*)data)[0];h2 *= m;};h1 ^= h2 >> 18; h1 *= m;h2 ^= h1 >> 22; h2 *= m;h1 ^= h2 >> 17; h1 *= m;h2 ^= h1 >> 19; h2 *= m;uint64_t h = h1;h = (h << 32) | h2;return h;
}#endif // MURMURHASH_H_INCLUDED

64位murmurhash 源码相关推荐

  1. 64位CentOs7源码安装mysql-5.6.35过程分享

    首先安装依赖包,避免在安装过程中出现问题 [root@bogon liuzhen]# yum -y install gcc gcc-c++ [root@bogon liuzhen]# yum -y i ...

  2. 64位CentOS源码编译方式安装wine

    说明:本文仅作本人笔记的之用,仅供参考.可能因不同环境而不同. 1. 从官网下载最新版的wine-1.6.2.tar.gz 2. 安装相关的包(这里是我安装的,可能由于不同系统已经安装的包不同而不一样 ...

  3. java+字节码工具64位_jclasslib 下载-jclasslib 32位64位(java字节码查看工具) 5.1 官方版 - 河东下载站...

    jclasslib是款免费的开源java字节码的查看工具:它支持进行查看您需要进行使用汉字运用到的Java字节码,并且还拥有一个的类库来让开发者进行读取,包括了修改.对JavaClass文件.字节码的 ...

  4. 2012 PHP热门资料64个+经典源码50个——下载目录 :

    小弟花了两个小时整理了Php方面的一些热门资料,汇总了资料下载地址,有专题,有文档,有源码,希望大家喜欢~ 完整附件0豆下载:http://down.51cto.com/data/419216 附件部 ...

  5. Android4.1 Jelly Bean ubuntu10.04/64环境下 源码编译 初初级

    2019独角兽企业重金招聘Python工程师标准>>> 首先交代一下自己本不是IT 行业,也没有编程基础,而且刚接触Android和Ubuntu,小白一枚, 花了将近半个月的时间,重 ...

  6. MD5 32位加密算法源码(测试通过)(系转载 飞扬天下)

    供自己学习使用 md5.h文件 #ifndef MD5_H #define MD5_H #include <string> #include <fstream> /* Type ...

  7. 升级版本-汇编码转机器码万能转换工具(支持32种CPU架构指令16/32/64位的转码)

    众所周知,计算机核心处理器就是CPU是计算机的重要组成部分.所有的程序都会化为机器代码由CPU去逐个执行. 而CPU架构类型众多,也导致了多种指令类别的不统一.如果有涉猎不同的CPU指令集时转换工具会 ...

  8. 【转载】64位Linux下源码安装apache2

    64位下源码安装apache2,中间过程遇到了好几个错误,总结起来都是跟64位机器下,lib库格式不匹配的问题,如: /usr/lib/libexpat.so: could not read symb ...

  9. linux怎么用源码安装mysql,Linux源码安装mysql步骤

    创建文件夹: mkdir  /usr/local/webserver 安装必要依赖包 yum -y install gcc gcc-c++ make ncurses-devel 安装cmake包: t ...

最新文章

  1. web进修之—Hibernate 继承映射(5)
  2. bzoj1601 [Usaco2008 Oct]灌水
  3. 信息熵与信息增益的理解
  4. qr码是二维码码_如何使用QR码进行有效的营销和推广
  5. Linux的简介与虚拟机的管理
  6. OpenCV中的「透视变换 / 投影变换 / 单应性」—cv.warpPerspective、cv.findHomography
  7. zoj 1562 反素数 附上个人对反素数性质的证明
  8. .mysql的配置文件是正确的,为啥启动后一查所展示的并不是自己设置的配置
  9. ETH 5分钟内涨幅2.06%,现价1104.03usdt
  10. cdh mysql sqoop 驱动_[bigdata-003]在cdh 5.7下 用sqoop1将mysql数据库数据导入到hdfs的方式...
  11. 开电视显示网管服务器数据下发超时,关于网络管理中的常见问题解决
  12. HTTPS SSL/TLS协议原理
  13. c++开源库rapidxml介绍与示例
  14. win7计算机怎么放在桌面上,win7系统把我的电脑放到桌面的解决办法
  15. mPEG-SCM 甲氧基PEG琥珀酰亚胺乙酸酯
  16. 论文阅读笔记——Vulnerability Dataset Construction Methods Applied To Vulnerability Detection A Survey
  17. linux shell 看门狗,Linux 下如何使用看门狗
  18. 浅析系统性思维——新书《系统思维的艺术》解读(下)
  19. 单链表 插入操作 和 删除操作 的易错点
  20. 洛谷P6503[COCI2010-2011#3] DIFERENCIJA

热门文章

  1. mysql安装问题:由于找不到msvcp120.dll
  2. kafka入门到实战
  3. 基于普中科技的单片机开发实验仪编写的数字表
  4. Unity-编辑器扩展(Editor)
  5. 统计学原理之描述性统计——开篇
  6. 一个可实施的技术方案模板
  7. MATLAB马尔科夫决策过程遗传,科学网—【RL系列】马尔可夫决策过程与动态编程笔记 - 管金昱的博文...
  8. 使用STM32制作U盘(device)
  9. 运放全桥整流电路分析(双电源供电运放)
  10. TeXlive2021+Texworks/TeXstudio/VS Code/Sublime Text on Windows WSL or Fedora