Exemple #1
0
 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);
            }
Exemple #3
0
        OrderedSequence(FingerTree <T, M> tree)
        {
            _measured = tree.Measured;
            _mk       = FingerTree <T, M> .MakeTree(_measured);

            _tree = tree;
        }
Exemple #4
0
 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));
        }
Exemple #6
0
        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)));
        }
Exemple #7
0
        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;
        }
Exemple #8
0
            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);
                }
            }
Exemple #9
0
        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)));
        }
Exemple #10
0
 public override FingerTree <SizedElement <T>, int> Merge(FingerTree <SizedElement <T>, int> f) => _finger.Merge(f);
Exemple #11
0
 public PriorityQueue(FingerTree <WeightedElement <T>, double> f)
 {
     _finger = f;
 }
Exemple #12
0
 public bool Add(T item)
 {
     _inner = _inner.AddLast(item, _lineage);
     return(true);
 }
Exemple #13
0
        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()));
        }
Exemple #14
0
 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));
 }
Exemple #15
0
 Sequence(FingerTree <T, int> tree)
 {
     _tree = tree;
 }
Exemple #16
0
 protected OrderedSequence(SortableInvariant <T, V> x, FingerTree <OrderedElement <T, V>, V> finger)
 {
     _x      = x;
     _finger = finger;
 }
Exemple #17
0
 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));
 }
Exemple #18
0
 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;
 }
Exemple #19
0
 public Builder(ImmList <T> inner)
 {
     _inner   = inner.Root;
     _lineage = Lineage.Mutable();
 }
Exemple #20
0
 public override FingerTree <WeightedElement <T>, double> App2(List <WeightedElement <T> > ts, FingerTree <WeightedElement <T>, double> f)
 {
     return(_finger.App2(ts, f));
 }
Exemple #21
0
 public FingerArray(FingerTree <SizedElement <T>, int> f)
 {
     _finger = f;
 }
Exemple #22
0
 public View(X end, FingerTree <X, Y> rest)
 {
     End  = end;
     Rest = rest;
 }
Exemple #23
0
 internal static ImmList <T> Wrap <T>(this FingerTree <T> .FTree <Leaf <T> > tree)
 {
     return(new ImmList <T>(tree));
 }
Exemple #24
0
 public RightView(T head, FingerTree <T, M> tail)
 {
     Head = head;
     Tail = tail;
 }
Exemple #25
0
 internal ImmList(FingerTree <T> .FTree <Leaf <T> > root)
 {
     Root = root;
 }
Exemple #26
0
 public override FingerTree <SizedElement <T>, int> App2(List <SizedElement <T> > ts, FingerTree <SizedElement <T>, int> f) => _finger.App2(ts, f);