public override FingerTree <T, M> App2(List <T> ts, FingerTree <T, M> f) { for (int i = ts.Count - 1; i >= 0; i--) { f = f.PushLeft(ts[i]); } return(f.PushLeft(_t)); }
public override FingerTree <T, M> Merge(FingerTree <T, M> f) => f.PushLeft(_t);
public override FingerTree <T, M> PushLeft(T t) { if (_leftDigits.Digits.Count == 4) { return(new DeepFingerTree <T, M>(_m, new Digit <T, M>(_m, t, _leftDigits.Digits[0]), _fingerTree.PushLeft(new Node <T, M>(_m, _leftDigits.Digits.Skip(1).ToList())), _rightDigits)); } else { var nl = new List <T>(_leftDigits.Digits); nl.Insert(0, t); return(new DeepFingerTree <T, M>(_m, new Digit <T, M>(_m, nl), _fingerTree, _rightDigits)); } }