fix refocus_tree
This commit is contained in:
parent
8de01ffd57
commit
cb129a96cf
@ -308,15 +308,21 @@ impl FutureMoves {
|
|||||||
|
|
||||||
let mut index_map = vec![None; self.arena.len()];
|
let mut index_map = vec![None; self.arena.len()];
|
||||||
|
|
||||||
self.arena = retain
|
let new_start: Vec<(usize, (usize, Move))> = retain
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.enumerate() // old_idx
|
.enumerate() // old_idx
|
||||||
.zip(self.arena.drain(..))
|
.zip(self.arena.drain(..))
|
||||||
.flat_map(|((old_idx, keep), node)| keep.then_some((old_idx, node))) // filter out unrelated nodes
|
.flat_map(|((old_idx, keep), node)| keep.then_some((old_idx, node))) // filter out unrelated nodes
|
||||||
.enumerate() // new_idx
|
.enumerate() // new_idx
|
||||||
.map(|(new_idx, (old_idx, mut node))| {
|
.collect();
|
||||||
index_map[old_idx] = Some(new_idx);
|
|
||||||
|
|
||||||
|
for &(new_idx, (old_idx, _)) in &new_start {
|
||||||
|
index_map[old_idx] = Some(new_idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.arena = new_start
|
||||||
|
.into_iter()
|
||||||
|
.map(|(_, (_, mut node))| {
|
||||||
if let Some(parent) = node.parent.as_mut() {
|
if let Some(parent) = node.parent.as_mut() {
|
||||||
if let Some(new_parent) = index_map[*parent] {
|
if let Some(new_parent) = index_map[*parent] {
|
||||||
*parent = new_parent;
|
*parent = new_parent;
|
||||||
@ -331,7 +337,7 @@ impl FutureMoves {
|
|||||||
*c = new_c;
|
*c = new_c;
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
false
|
panic!("node is not kept in move");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user