Exemple #1
0
        static FTreeM <OrderedElement <T, M>, M> OrdMerge(FTreeM <OrderedElement <T, M>, M> ordTree1, FTreeM <OrderedElement <T, M>, M> ordTree2)
        {
            ViewL <OrderedElement <T, M>, M> lView2 = ordTree2.LeftView();

            if (lView2 == null)
            {
                return(ordTree1);
            }
            //else
            OrderedElement <T, M>             bHead = lView2.head;
            FTreeM <OrderedElement <T, M>, M> bTail = lView2.ftTail;

            // Split ordTree1 on elems <= and then > bHead
            Pair <FTreeM <OrderedElement <T, M>, M>, FTreeM <OrderedElement <T, M>, M> >
            tree1Split = ordTree1.SeqSplit
                             (new MPredicate <M>
                                 (FP.Curry <M, M, bool>(LessThanOrEqual2, bHead.Measure()))
                             );

            FTreeM <OrderedElement <T, M>, M> leftTree1  = tree1Split.First;
            FTreeM <OrderedElement <T, M>, M> rightTree1 = tree1Split.Second;

            // OrdMerge the tail of ordTree2
            //          with the right-split part of ordTree1
            FTreeM <OrderedElement <T, M>, M>
            mergedRightparts = OrdMerge(bTail, rightTree1);

            return(leftTree1.Merge(mergedRightparts.PushFront(bHead)));
        }
Exemple #2
0
 public PriorityQueue(IEnumerable <T> items)
 {
     foreach (T t in items)
     {
         _treeRep = _treeRep.PushBack(new CompElement <T>(t));
     }
 }
Exemple #3
0
        public OrderedSequence(Key <T, M> key, IEnumerable <T> elements)
        {
            _key = key;

            _tree = elements
//				.Select(x => new OrderedElement<T, M>(x, key))
                    .Aggregate(new OrderedSequence <T, M>(key), (current, element) => current.Insert(element))
                    ._tree;
        }
Exemple #4
0
 public override FTreeM <CompElement <T>, double> Merge(FTreeM <CompElement <T>, double> rightFT)
 {
     if (!(rightFT is PriorityQueue <T>))
     {
         throw new Exception("Error: PriQue merge with non-PriQue attempted!");
     }
     //else
     return(new PriorityQueue <T>
            (
                _treeRep.Merge(((PriorityQueue <T>)rightFT)._treeRep)
            ));
 }
Exemple #5
0
 protected OrderedSequence(Key <T, M> key, FTreeM <OrderedElement <T, M>, M> source)
 {
     _key  = key;
     _tree = source;
 }
Exemple #6
0
 public OrderedSequence(Key <T, M> key)
 {
     _key  = key;
     _tree = new EmptyFTreeM <OrderedElement <T, M>, M>(new KeyMonoid <T, M>(key).Monoid);
 }
Exemple #7
0
        public OrderedSequence <T, M> Merge(OrderedSequence <T, M> other)
        {
            FTreeM <OrderedElement <T, M>, M> merged = OrdMerge(_tree, other._tree);

            return(new OrderedSequence <T, M>(_key, merged));
        }
Exemple #8
0
 public PriorityQueue(FTreeM <CompElement <T>, double> elemTree)
 {
     _treeRep = elemTree;
 }
Exemple #9
0
 public override FTreeM <CompElement <T>, double> App2(List <CompElement <T> > ts, FTreeM <CompElement <T>, double> rightFT)
 {
     return(_treeRep.App2(ts, rightFT));
 }