====== TComplexHash ====== **//Inherited from//** NULL **//Inherited by//** NULL **//Friend class//** HashIterator,HashCleaner, **//Description//** TComplexHash与THash类似,用于管理索引比较复杂的数据,这些数据的数字标识并不唯一,但是和辅助标识一起组成唯一的数据单元。TComplexHash管理的数据除了必须提供数字标识的接口外,还需要提供判断数据相等的接口。对TComplexHash的数据遍历须用ComplexHashIterator。TComplexHash的数据储存方式与THash一样,数据在BIT的位置仍然由数字标识确定。 **//Members//** * LinkNode * [[tcomplexhash#m_phashlinktable|m_pHashLinkTable]] * ulong [[tcomplexhash#m_ulcount|m_ulCount]] * ulong [[tcomplexhash#m_ulmodnumber|m_ulModNumber]] * MemPool * [[tcomplexhash#m_phashpool|m_pHashPool]] * bool [[tcomplexhash#m_bselfpool|m_bSelfPool]] **//Public interface//** * [[tcomplexhash#tcomplexhash1|TComplexHash]](ulong hashSize,MemPool *pMemPool=0) * bool [[tcomplexhash#insert|insert]](T * pData) * void [[tcomplexhash#remove|remove]](T * pData) * void [[tcomplexhash#clear|clear]]() * void [[tcomplexhash#resize|resize]](ulong newSize) * T * [[tcomplexhash#getdata|getData]](T *pData) * ulong [[tcomplexhash#getcount|getCount]]() * ulong [[tcomplexhash#getsize|getSize]]() * void [[tcomplexhash#setiterator|setIterator]](Iterator * pIter) **//Private interface//** * void [[tcomplexhash#erase|erase]](LinkNode * pNode) ---- {{anchor:m_phashlinktable}} **LinkNode * m_pHashLinkTable** Hash基本索引表,Hash的节点为LinkNode类型 {{anchor:m_ulcount}} **ulong m_ulCount** 节点的总个数 {{anchor:m_ulmodnumber}} **ulong m_ulModNumber** 用于取模运算的模数,也是节点基本表的大小,一般为质数 {{anchor:m_phashpool}} **MemPool * m_pHashPool** 当添加一个引起索引冲突的节点时,该节点的空间由该内存池分配 {{anchor:m_bselfpool}} **bool m_bSelfPool** 内存池来源于外部指定,则为false,若由自己创建,则为true ---- {{anchor:tcomplexhash1}} **TComplexHash(ulong hashSize,MemPool *pMemPool=0)** *function: 构造TComplexHash对象 *parameters: - [i]ulong hashSize: 期望的hash的节点规模,取值范围下限大于0,上限取决于内存空间大小。hashSize决定了m_ulModNumber的值(比m_ulHashSize/2大的质数) - [i]MemPool * pMemPool = 0: 从外部指定用于分配节点空间的内存池,默认为不从外部指定,即为NULL *return value: 无 {{anchor:insert}} **bool insert(T * pData)** *function: 将数据pData插入到TComplexHash中 *parameters: - [i]T *pData: 插入的数据 *return value: 若插入成功则返回true,若插入失败或者数据已在hash中返回false {{anchor:remove}} **void remove(T * pData)** *function: 将数据T从TComplexHash中删除 *parameters: - [i]T * pData: 需要删除的数据,该指针并不一定是TComplexHash中的数据,但是它必须保证数据标识和辅助数据与删除目标一致。 *return value: 无 {{anchor:clear}} **void clear()** *function: 重置基本索引表为空白状态,释放由内存池分配的节点空间,如果内存池是自行创建,重置内存池 *parameters: NULL *return value: 无 {{anchor:resize}} **void resize(ulong newSize)** *function: *parameters: 重新设置TComplexHash的大小,并将原Hash的数据添加到新的TComplexHash中 - [i]ulong newSize: TComplexHash的新的容量 *return value: 无 {{anchor:getdata}} **T * getData(T *pData)** *function: 在TComplexHash中获取与数据T一致((数字标识与辅助标识均相同))的原始数据 *parameters: - [i]T *pData: 需要检索的参考数据,与目标数据一致 *return value: 若TComplexHash中有匹配的数据,则返回数据的地址,否则返回NULL {{anchor:getcount}} **ulong getCount()** *function: 获取节点总数 *parameters: NULL *return value: 节点总数 {{anchor:getsize}} **ulong getSize()** *function: 获取TComplexHash表的大小 *parameters: NULL *return value: TComplexHash基本索引表的长度 {{anchor:setiterator}} **void setIterator(Iterator * pIter)** *function: 绑定遍历迭代器 *parameters: - [i]Iterator * pIter:遍历迭代器的指针,该指针必须有效 *return value: 无