private void ReplaceNode(DivisionNode src, DivisionNode dest) { Debug.Assert(src.ParentList == this); dest.SetParentList(this); if (_first == src) { _first = dest; } else { DivisionNode n = _first; while (n.Next != src) { n = n.Next; Debug.Assert(n != null); } n.Next = dest; } }
//srcの位置を、listの中身で置き換える。ratio調整に注意 public void ReplaceNodeByList(DivisionNode src, DivisionList list) { Debug.Assert(src.ParentList == this); int oldcount = this.NodeCount; int addedcount = list.NodeCount; double r = src.Ratio; DivisionNode t = list.FirstNode; DivisionNode last = null; while (t != null) { t.Ratio *= r; t.SetParentList(this); last = t; t = t.Next; } Debug.Assert(last.Next == null); //これを見つけた ReplaceNode(src, list.FirstNode); last.Next = src.Next; Debug.Assert(oldcount + addedcount - 1 == this.NodeCount); }
private void ReplaceNode(DivisionNode src, DivisionNode dest) { Debug.Assert(src.ParentList == this); dest.SetParentList(this); if (_first == src) { _first = dest; } else { DivisionNode n = _first; while (n.Next != src) { n = n.Next; Debug.Assert(n != null); } n.Next = dest; } }