Uniform Initialization
区分 {} 与 () 两种构造方式 // C++的一些构造方式 Object obj_default; // 默认构造 Object obj_copy = obj1; // 拷贝构造 obj_copy = obj1; // 赋值, 非构造 Object obj_uniform{}; // 统一初始化 C++ 具有非常沉重的历史包袱, 为了向前兼容, 必须要保留...
BoxTree in Klayout
box_tree_node 一眼四叉树的树结点数据结构 /** * @brief The node object */ template <class Tree> class box_tree_node { public: typedef typename Tree::point_type point_type; typedef typename Tree::...
Multithread Framework in Klayout
Klayout 提供了一套多线程的框架, 在 EDA 这样的计算密集型场景下, 每个核心只需一个线程即可达到高负载. 因此此处的 multithread 可以等价于 multiworker. JobBase
EdgeProcessor
一个非常通用的扫描线算法流程, 在 Klayout 内部对许多运算中都用到的运算框架. 要注意的是, 由于 Klayout 的项目几乎通过一个人开发, 为了避免代码膨胀减轻维护压力, 所以有大量的代码复用. 然而这是一个双刃剑, 代码维护轻松了, 但是由于一个流程框架涉及众多命令, 因此势必相较于特例化的算法流程而言更加复杂低效. 很难读懂, 一个看似没什么作用的值重置可能都隐含着一类命令...
Keywords: auto
通常而言, auto 能够根据类型推导规则推导出你想要的类型. 然而, 由于推到规则的限制, 部分情况下可能需要引导编译器推导出你想要的类型. prefer auto to explicit type declaration 这是一个建议, 事实上众多自带类型推导的语言同样承担了很多大型项目, 这一点几乎就可以确定显式类型推导并不一定是一个大型项目的必要条件. 一个良好的变量命名即可解决...
value category
C++ 中的任意表达式都有一个类型(type), 以及值类型(value category). 值类型是理解编译器在表达式计算过程中针对临时变量的创建, 复制和移动所必须遵循的规则的基础. glvalue: 一个表达式能够指定一个函数或对象 prvalue: 一个表达式的计算能够初始化对象或位域, 或是一个内置操作符的计算结果 xvalue: 是一个能够指定一个对象的资源被复...
Klayout DB
这玩意儿也太大了, 根本就不可能概括. 首先要记住以下概念: child instance: 指的是当前 cell/instance 的下一个 hierarchy level 的 instance 注意: child instance 与 parent instance 是一对概念, 就是把 hierarchy tree 的结点换成 instance. ...
hier_clusters
地狱般的代码, 所以请抱着批判的态度看下去. 如果你了解并查集的基本概念的话, 对于了解 hier_clusters 的部分算法有很大帮助. hier_clusters 很难通过几句话能够说出它的作用, 这里只试图探讨构造该数据结构的过程. 根据代码片段, 我们将其分为两部分. build local cluster 可以简单概括为, 通过并查集构造相连 Cell 的 ...
Deduce Type
可以算得上是 Morden Cpp 的基石, 实际应该在了解通用引用之后再熟悉类型推导的, 但我照着 Effective Mordern Cpp 学的, 所以就这样吧 Template Type Deduction 示例代码如下, 我们将分析 ParamType 与 T 在不同实参传递情况下的类型推导结果 // define template<typename T> voi...