学习 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 这里不难理解。
* 注1: 模板参数 VI 指 DenseMapInfo<V>,在研究 DenseMap<> 的时候我们再仔细看吧。
* 注2: 内部使用 [[DenseMap]], 使用键类型为 V, 值类型为 char。实质上还是浪费了空间的。但这样似乎不要求 V 实现有特殊的 empty,tombstone 标记值?也许应该有更好的办法?
* iterator 内部偷懒只实现了 ++() 前缀递增,没有实现 ++(int) 后缀递增。
* 由于 DenseSet 内部使用 [[DenseMap]],所以需要稍后研究 DenseMap 的时候再弄清楚了。
文件注释: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学习笔记(15)
- Linux学习15_CentOS6.5下netcat工具安装教程
- 日语学习之新版初级标准日本语-15 小野さんは今新聞を読んでいます
- OAF学习笔记-15-大文本(过长,英文数字)在table 中换行显示
- Python学习之路15——列表实现栈和队列
- FreeBSD学习笔记15-FreeBSD下安装Apache
- JS学习15(HTML5脚本编程)
- ARMv8-A系列学习笔记(5)--Chapter 15 Power Management
- 学习15
- linux内核学习(15)内核编程基本功之内核同步与自旋锁spinlock_t
- C++学习笔记 day15
- 学习进度条15
- 数据科学之机器学习15: 主成分分析
- Atlas学习手记(15):使用RoundedCorners为控件加上圆角效果
- Python学习笔记15:标准库之获取进程信息(os包)
- Spring学习总结(15)——Spring AOP 拦截器的基本实现
- LLVM学习笔记(24)
- 2014-07-18 Java Web的学习(15)-----struts2(1)----XWork中的容器
- C#学习基础概念二十五问 11-15
- JAVA学习笔记15——Spring框架第二章