学习 LLVM(15) DenseSet

文件位于 llvm/include/llvm/[[ADT]]/DenseSet.h

文件注释:Dense probed hash table -- 密集探测哈希表?

Dense: 密集的,密度大的。

文件中定义的类是 [[DenseSet]]

== DenseSet 类概要 ==
由于前面在学习 SmallPtrSet 的时候已经接触过 llvm 中 DenseXXX 的相关概念了,所以我们相信 DenseSet 这里不难理解。

template <V, VI> // 注1 
class DenseSet {
  DenseMap<V,char,...> TheMap;   // 注2: 内部实际使用 Map 实现 Set。
  
  this() // 复制构造等构造形式。
  empty(),size(),count(),clear() 等标准容器方法。
  iterator, const_iterator 类定义及 begin(), end() 等迭代器获取方法。
    // 迭代器实质上是 DenseMap 实现的迭代器的简单封装。
  find(),erase(),insert() 等容器方法。
}

 * 注1: 模板参数 VI 指 DenseMapInfo<V>,在研究 DenseMap<> 的时候我们再仔细看吧。
* 注2: 内部使用 [[DenseMap]], 使用键类型为 V, 值类型为 char。实质上还是浪费了空间的。但这样似乎不要求 V 实现有特殊的 empty,tombstone 标记值?也许应该有更好的办法?
* iterator 内部偷懒只实现了 ++() 前缀递增,没有实现 ++(int) 后缀递增。
* 由于 DenseSet 内部使用 [[DenseMap]],所以需要稍后研究 DenseMap 的时候再弄清楚了。

转载于:https://my.oschina.net/u/232554/blog/42514

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值