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