public FingerArray(IEnumerable <T> tt) { foreach (T t in tt) { _finger = _finger.PushRight(new SizedElement <T>(t)); } }
public void EnqueueAndDequeue() { var q = FingerTree.Empty <int>(); Maybe <int> m; q = q.EnqueuePrefix(1); q = q.EnqueuePrefix(2); q = q.EnqueuePrefix(3); Expect.IsSome(3, q.CurrentPrefix); Expect.IsSome(1, q.CurrentSuffix); (q, m) = q.DequeueSuffix(); Expect.IsSome(1, m); Expect.IsSome(2, q.CurrentSuffix); (q, m) = q.DequeueSuffix(); Expect.IsSome(2, m); Expect.IsSome(3, q.CurrentSuffix); (q, m) = q.DequeueSuffix(); Expect.IsSome(3, m); Expect.IsNone(q.CurrentSuffix); q = q.EnqueuePrefix(4); q = q.EnqueuePrefix(5); Expect.IsSome(4, q.CurrentSuffix); (q, m) = q.DequeueSuffix(); Expect.IsSome(4, m); Expect.IsSome(5, q.CurrentSuffix); (q, m) = q.DequeueSuffix(); Expect.IsSome(5, m); Expect.IsNone(q.CurrentSuffix); }
OrderedSequence(FingerTree <T, M> tree) { _measured = tree.Measured; _mk = FingerTree <T, M> .MakeTree(_measured); _tree = tree; }
public PriorityQueue(IEnumerable <T> tt) { foreach (var t in tt) { _finger = _finger.PushRight(new WeightedElement <T>(t)); } }
public FingerTreeIterator(FingerTree <TValue> .FTree <Leaf <TValue> > e) { //var maxHeight =(int)(4 * Math.Log(e.Measure, 2.0)); //no way is the height bigger than this! _future = new Stack <Marked <FingerTreeElement, int> >(); var wTyped = (FingerTreeElement)e; _future.Push(wTyped.Mark(-1)); }
public override FingerTree <WeightedElement <T>, double> Merge(FingerTree <WeightedElement <T>, double> f) { if (!(f is PriorityQueue <T>)) { throw new Exception("oops"); } return(new PriorityQueue <T>(_finger.Merge(((PriorityQueue <T>)f)._finger))); }
public OrderedSequence(SortableInvariant <T, V> x, IEnumerable <T> tt) : this(x) { var initial = new OrderedSequence <T, V>(x); foreach (T t in tt) { initial = initial.PushRight(new OrderedElement <T, V>(t, x)); } _finger = initial._finger; }
public void AddRange(IEnumerable <T> items) { items.CheckNotNull("items"); var list = items as ImmList <T>; if (list != null) { _inner = _inner.AddLastList(list.Root, _lineage); } else { int len; var arr = items.ToArrayFast(out len); int i = 0; var tree = FingerTree <T> .FTree <Leaf <T> > .Construct(arr, ref i, len, _lineage); _inner = _inner.AddLastList(tree, _lineage); } }
static FingerTree <OrderedElement <T, V>, V> Merge(FingerTree <OrderedElement <T, V>, V> f, FingerTree <OrderedElement <T, V>, V> g) { var v = g.LeftView(); if (v == null) { return(f); } var end = v.End; var rest = v.Rest; var fsplit = f.Split(((Func <V, V, bool>)LessThanOrEqual).Curry(end.Measure())); var fleft = fsplit.Left; var fright = fsplit.Right; var merged = Merge(rest, fright); return(fleft.Merge(merged.PushLeft(end))); }
public override FingerTree <SizedElement <T>, int> Merge(FingerTree <SizedElement <T>, int> f) => _finger.Merge(f);
public PriorityQueue(FingerTree <WeightedElement <T>, double> f) { _finger = f; }
public bool Add(T item) { _inner = _inner.AddLast(item, _lineage); return(true); }
public static OrderedSequence <T, M> Empty(Monoid <M> monoid, Func <T, M> measure) { var measured = new Measured <T, M>(monoid, measure); return(new OrderedSequence <T, M>(FingerTree <T, M> .MakeTree(measured).Empty())); }
public FingerTree <T, M> Deep(Digit <T, M> prefix, FingerTree <Node <T, M>, M> middle, Digit <T, M> suffix) { return(Deep(_m.Append(prefix.Measure(), _m.Append(middle.Size, suffix.Measure())), prefix, middle, suffix)); }
Sequence(FingerTree <T, int> tree) { _tree = tree; }
protected OrderedSequence(SortableInvariant <T, V> x, FingerTree <OrderedElement <T, V>, V> finger) { _x = x; _finger = finger; }
public FingerTree <T, M> Deep(M measure, Digit <T, M> prefix, FingerTree <Node <T, M>, M> middle, Digit <T, M> suffix) { return(new Deep <T, M>(_m, measure, prefix, middle, suffix)); }
public OrderedSequence(SortableInvariant <T, V> x) { _finger = new EmptyFingerTree <OrderedElement <T, V>, V>(new Monoid <V>(x.Degenerate, (a, b) => b.CompareTo(x.Degenerate) == 0 ? a : b)); _x = x; }
public Builder(ImmList <T> inner) { _inner = inner.Root; _lineage = Lineage.Mutable(); }
public override FingerTree <WeightedElement <T>, double> App2(List <WeightedElement <T> > ts, FingerTree <WeightedElement <T>, double> f) { return(_finger.App2(ts, f)); }
public FingerArray(FingerTree <SizedElement <T>, int> f) { _finger = f; }
public View(X end, FingerTree <X, Y> rest) { End = end; Rest = rest; }
internal static ImmList <T> Wrap <T>(this FingerTree <T> .FTree <Leaf <T> > tree) { return(new ImmList <T>(tree)); }
public RightView(T head, FingerTree <T, M> tail) { Head = head; Tail = tail; }
internal ImmList(FingerTree <T> .FTree <Leaf <T> > root) { Root = root; }
public override FingerTree <SizedElement <T>, int> App2(List <SizedElement <T> > ts, FingerTree <SizedElement <T>, int> f) => _finger.App2(ts, f);