3 releases

0.2.0 Aug 16, 2023
0.1.2 Mar 5, 2024
0.1.1 Jul 27, 2022
0.1.0 Mar 1, 2022

#2 in #dirty

Download history 299/week @ 2023-12-17 343/week @ 2023-12-24 51/week @ 2023-12-31 1/week @ 2024-01-07 5/week @ 2024-02-18 49/week @ 2024-02-25 146/week @ 2024-03-03 33/week @ 2024-03-10 15/week @ 2024-03-17

244 downloads per month
Used in 2 crates

MIT/Apache

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
~43K SLoC