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