Beispiel #1
0
                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);
                }
Beispiel #2
0
                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);
                }