| 644 | } |
| 645 | |
| 646 | private Node popTail(int level, Node node){ |
| 647 | int subidx = ((cnt-2) >>> level) & 0x01f; |
| 648 | if(level > 5) |
| 649 | { |
| 650 | Node newchild = popTail(level - 5, (Node) node.array[subidx]); |
| 651 | if(newchild == null && subidx == 0) |
| 652 | return null; |
| 653 | else |
| 654 | { |
| 655 | Node ret = new Node(root.edit, node.array.clone()); |
| 656 | ret.array[subidx] = newchild; |
| 657 | return ret; |
| 658 | } |
| 659 | } |
| 660 | else if(subidx == 0) |
| 661 | return null; |
| 662 | else |
| 663 | { |
| 664 | Node ret = new Node(root.edit, node.array.clone()); |
| 665 | ret.array[subidx] = null; |
| 666 | return ret; |
| 667 | } |
| 668 | } |
| 669 | |
| 670 | static final class TransientVector extends AFn implements ITransientVector, ITransientAssociative2, Counted{ |
| 671 | volatile int cnt; |