3 releases
0.2.0 |
|
---|---|
0.1.2 | Mar 5, 2024 |
0.1.1 | Jul 27, 2022 |
0.1.0 | Mar 1, 2022 |
#1631 in Data structures
Used in 2 crates
12KB
178 lines
同于记录层次脏
lib.rs
:
该库用于对树形结构数据标记脏 和普通的脏编辑不同,LayerDirty将同一层的节点索引放入同一个Vec中,并将这些Vec按照层的大小,由小到大放置在一个更外层的Vec中。 例如[[1, 2, 3], [], [4, 5, 6], [7, 8]],表示第0层中的节点1、节点2、节点3被标记为脏, 第1层没有脏节点,第2层中节点4、节点4、节点6被标记为脏,第3层中节点7、节点8被标记为脏。 LayerDirty特别适合对树形结构中,子节点的数据计算依赖于父节点的数据计算。
一个常用的例子是: ui中的节点被组织成树形结构,每个节点都存在transfrom属性,可以对当前节点进行变换(是将本节点和其子节点作为整体进行变化) 根据公式,一个节点的最终变换,实际上是父变换子变换, 如果有更多的父节,则为...祖父子。 因此, 以三层节点为例,先从祖节点开始计算祖节点的最终变换(祖最终变换 = 祖变换), 根据结果计算父节点的最终变换(父最终变换 = 祖最终变换 父变化), 再根据父的计算结果计算子的最终变换(子最终变换 = 父最终变换* 子变化). 如果我们将计算顺序反过来,势必会造成多重重复计算: 子最终变换 = 子变化; 父最终变换 = 父变换; 子最终变换= 父最终变换 * 子变化(前一步计算的子最终变换由于缺少父的影响,并不是真正的结果,需要重新计算) ... 可以看到,同一个节点可能被反复计算多次
LayerDirty就是为了解决这种父子存在计算顺序的问题。 利用LayerDirty,你可以非常轻松的先迭代父脏,再迭代子脏(其中的脏对每一层进行了划分,并按照层从小到大的顺序排列, 我们只需要从最外层数组的第一个开始迭代就可以了)
Dependencies
~2MB
~45K SLoC