您的位置:首页 > 其它

学习 LLVM(15) DenseSet

2012-03-05 00:00 288 查看
文件位于 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 的时候再弄清楚了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LLVM