- while let Some(parent_node) = parent {
- let plen = parent_node.len.get(); nlen += 1;
- if plen > nlen
- { break; }
- else if plen == nlen {
- node.right.set(parent_node.down.get());
- parent_node.down.set(Some(node));
- break;
- } else {
- parent_node.down.set(Some(node));
- node.right.set(None);
- parent_node.len.set(nlen);
- node = parent_node; parent = node.up.get();
+ loop {
+ match parent {
+ None => {
+ if nlen >= max {
+ if nlen > max {
+ max = nlen;
+ winners.clear();
+ }
+ winners.push(node);
+ }
+ break;
+ }
+ Some(parent_node) => {
+ let plen = parent_node.len.get(); nlen += 1;
+ if plen > nlen
+ { break; }
+ else if plen == nlen {
+ node.right.set(parent_node.down.get());
+ parent_node.down.set(Some(node));
+ break;
+ } else {
+ parent_node.down.set(Some(node));
+ node.right.set(None);
+ parent_node.len.set(nlen);
+ node = parent_node; parent = node.up.get();
+ }
+ }