public override FTree <TChild> AddLast(TChild item, Lineage lineage) { #if ASSERTS var expectedSize = Measure + item.Measure; #endif FTree <TChild> ret; if (RightDigit.Size < 4) { ret = MutateOrCreate(LeftDigit, DeepTree, RightDigit.AddLast(item, lineage), lineage); } else { var rightmost = new Digit(RightDigit.Fourth, item, lineage); var leftmost = RightDigit.RemoveLast(lineage); var newDeep = DeepTree.AddLast(leftmost, lineage); ret = MutateOrCreate(LeftDigit, newDeep, rightmost, lineage); } #if ASSERTS ret.Measure.AssertEqual(expectedSize); ret.Right.AssertEqual(item); #endif return(ret); }
public override FTree <TChild> AddLast(TChild item, Lineage lineage) { #if ASSERTS var expected = Measure + item.Measure; #endif FTree <TChild> ret; if (CenterDigit.Size < 4) { ret = new Single(CenterDigit.AddLast(item, lineage), lineage); } else { var rightmost = new Digit(CenterDigit.Fourth, item, lineage); var leftmost = CenterDigit.RemoveLast(lineage); ret = new Compound(leftmost, FTree <Digit> .Empty, rightmost, lineage); } #if ASSERTS ret.Measure.AssertEqual(expected); ret.Right.AssertEqual(item); #endif return(ret); }