private void MoveAndSave(CodeRange a, CodeRange b) { if (a.Equals(b)) { return; } while (true) { if (a.Span == 1) { MoveAndSave(a.fromCode, b.fromCode); } else { if (a.fromCode.Youngest() < b.fromCode.Youngest()) { MoveAndSave(a.toCode, b.toCode); a = new CodeRange(a.fromCode, a.toCode + -1); b = new CodeRange(b.fromCode, b.toCode + -1); continue; } MoveAndSave(a.fromCode, b.fromCode); a = new CodeRange(a.fromCode + 1, a.toCode); b = new CodeRange(b.fromCode + 1, b.toCode); continue; } break; } }