User Tools

Site Tools


class:kernel:hash

Hash

Inherited from NULL

Inherited by NULL

Friend class HashIterator

Description

存储管理数据地址,使用取模的Hash运算快速定位数据地址。
Hash由基本索引表(Base Index Table,以下简称BIT)和一个用于分配Hash节点的内存池组成,基本索引表的长度表征了Hash的大小。Hash节点(LinkNode)包含两个指针,其中一个指向数据,另一个指向下一个节点。由Hash定位的数据需要提供一个函数(IdGetter)以获取唯一标识它的整型数,将此整型数对基本索引表的长度取模,得到的余数就是该数据在Hash中的索引。原则上该数据的地址存在基本索引表余数对应的位置上,如果有两个数据拥有相同的索引,则将所有的同索引的数据链结起来形成一个链表,除了存放在基本索引表的节点外,其他节点都存储在内存池中。
为了减小数据冲突,基本索引表的大小应选择适合的质数。
为了避免嵌套的遍历过程所导致的冲突,对Hash数据的遍历引入到HashIterator完成。

Members

  • LinkNode * m_pHashLinkTable
  • ulong m_ulCount
  • ulong m_ulModNumber
  • IdGetter m_pfIdGetter
  • MemPool * m_pHashPool
  • bool m_bSelfPool

Public interface

  • bool insert(void *pData)
  • void remove(ulong id)
  • void clear()
  • void resize(ulong newSize)
  • void * getData(ulong id)
  • void * operator [] (ulong id)
  • K2::ulong getCount()
  • K2::ulong getSize()

see THash

class/kernel/hash.txt · Last modified: 2020/06/20 22:43 (external edit)