欢迎来到天天文库
浏览记录
ID:26790908
大小:84.00 KB
页数:8页
时间:2018-11-29
《暴雪hash算法封装及测试源码_jluzc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、魔兽哈希算法封装和测试Jluzc2012.12.14 近期由于需要,研究了魔兽文件打包管理器的相关算法,重点对其文件索引表的生成和查找进行了研究:采用哈希表进行,在冲突方面的处理方面,采用线性探测再散列。在添加和查找过程中进行了三次哈希,第一个哈希值用来查找,后两个哈希值用来校验,这样可以大大减少冲突的几率。 这里对其进行了简单的封装,扩展时,仅仅需要对结构体进行扩展即可。更为详细的说明,参考代码: 一、类声明头文件1./////////////////////////////////////////////////////////////////
2、//////////// 2.// Name: HashAlgo.h 3.// Purpose: 使用魔兽Hash算法,实现索引表的填充和查找功能。 4.// Author: jluzc 5.// Modified by: 6.// Created: 07/30/09 7.// RCS-ID: $Id: treetest.h 43021 2012-07-30 16:36:51Z VZ $ 8.// Copyright: (C) Copyright 2009, TSong Corporation, A
3、ll Rights Reserved. 9.// Licence: 10.///////////////////////////////////////////////////////////////////////////// 11. 12.#define MAXFILENAME 255 // 最大文件名长度 13.#define MAXTABLELEN 1024 // 默认哈希索引表大小 14. 15.//////////////////////////////////////////////////////////////
4、//////////// 16.// 测试宏定义,正式使用时关闭 17.#define DEBUGTEST 1 18. 19.////////////////////////////////////////////////////////////////////////// 20.// 哈希索引表定义 21.typedef struct 22.{ 23. long nHashA; 24. long nHashB; 25. bool bExists; 26. char test_filename[MAXFILENAME];
5、 27. // ...... 28.} MPQHASHTABLE; 29. 30.////////////////////////////////////////////////////////////////////////// 1.// 对哈希索引表的算法进行封装 2.class CHashAlgo 3.{ 4.public: 5. 6.#if DEBUGTEST 7. long testid; // 测试之用 8.#endif 9. 10. CHashAlgo( const long nTableLength
6、 = MAXTABLELEN )// 创建指定大小的哈希索引表,不带参数的构造函数创建默认大小的哈希索引表 11. { 12. prepareCryptTable(); 13. m_tablelength = nTableLength; 14. 15. m_HashIndexTable = new MPQHASHTABLE[nTableLength]; 16. for ( int i = 0; i < nTableLength; i++ ) 17. { 18.
7、 m_HashIndexTable[i].nHashA = -1; 19. m_HashIndexTable[i].nHashB = -1; 20. m_HashIndexTable[i].bExists = false; 21. m_HashIndexTable[i].test_filename[0] = '/0'; 22. } 23. } 24. 25. void prepareCryptTable();
此文档下载收益归作者所有