@Override public void replaceSlidableChildren(NodeRef node, NodeRef lft, NodeRef rgt) { int nn = node.getNumber(); int lftn = lft.getNumber(); int rgtn = rgt.getNumber(); assert pionodes[nn].lft >= 0; pionodes[nn].lft = lftn; pionodes[nn].rgt = rgtn; pionodes[lftn].anc = pionodes[nn].nodeNumber; pionodes[rgtn].anc = pionodes[nn].nodeNumber; }
@Override public NodeRef getSlidableChild(NodeRef node, int j) { int n = node.getNumber(); return j == 0 ? pionodes[pionodes[n].lft] : pionodes[pionodes[n].rgt]; }
@Override public boolean isExternalSlidable(NodeRef node) { return (pionodes[node.getNumber()].lft < 0); }
@Override public void setSlidableNodeHeight(NodeRef node, double height) { assert node == pionodes[node.getNumber()]; ((PopsIONode) node).height = height; }
@Override public double getSlidableNodeHeight(NodeRef node) { assert node == pionodes[node.getNumber()]; return ((PopsIONode) node).getHeight(); }
@Override public Taxon getSlidableNodeTaxon(NodeRef node) { assert node == pionodes[node.getNumber()]; return ((PopsIONode) node).getTaxon(); }
@Override public void replaceSlidableRoot(NodeRef newroot) { rootn = newroot.getNumber(); pionodes[rootn].anc = -1; }