Example #1
0
 public Digit(Monoid <V> m, U u1, U u2, U u3)
 {
     M = m;
     Digits.Add(u1);
     Digits.Add(u2);
     Digits.Add(u3);
 }
Example #2
0
            public Node(Monoid <V> m, U u1, U u2)
            {
                ConcreteMonoid = m;
                Nodes.Add(u1);
                Nodes.Add(u2);

                PreCalcMeasure = ConcreteMonoid.BinaryOperator(u1.Measure(), u2.Measure());
            }
Example #3
0
            public Node(Monoid <V> m, List <U> uu)
            {
                ConcreteMonoid = m;
                Nodes          = uu;

                PreCalcMeasure = ConcreteMonoid.Zero;
                foreach (var u in Nodes)
                {
                    PreCalcMeasure = ConcreteMonoid.BinaryOperator(PreCalcMeasure, u.Measure());
                }
            }
Example #4
0
        public static FingerTree <T, M> FromSequence(IEnumerable <T> sequence, Monoid <M> m)
        {
            var sequenceEnum    = sequence.GetEnumerator();
            FingerTree <T, M> r = new EmptyFingerTree <T, M>(m);

            while (sequenceEnum.MoveNext())
            {
                r = r.PushRight(sequenceEnum.Current);
            }

            return(r);
        }
Example #5
0
            public Node(Monoid <V> m, U u1, U u2, U u3)
            {
                ConcreteMonoid = m;
                Nodes.Add(u1);
                Nodes.Add(u2);
                Nodes.Add(u3);

                PreCalcMeasure = ConcreteMonoid.Zero;
                foreach (var u in Nodes)
                {
                    PreCalcMeasure = ConcreteMonoid.BinaryOperator(PreCalcMeasure, u.Measure());
                }
            }
Example #6
0
        public static List <Node <T, M> > ListOfNodes(Monoid <M> m, List <T> tt)
        {
            var         list = new List <Node <T, M> >();
            Node <T, M> next = null;

            if (tt.Count < 4)
            {
                next = new Node <T, M>(m, tt);
                list.Add(next);
                return(list);
            }

            next = new Node <T, M>(m, new List <T>(tt.GetRange(0, 3)));
            list.Add(next);
            list.AddRange(ListOfNodes(m, tt.GetRange(3, tt.Count - 3)));
            return(list);
        }
Example #7
0
        public DeepFingerTree(Monoid <M> m, Digit <T, M> f, FingerTree <Node <T, M>, M> ft, Digit <T, M> b)
        {
            if (f.Digits.Count > 0)
            {
                _m = m;

                _leftDigits  = f;
                _fingerTree  = ft;
                _rightDigits = b;

                PreCalcMeasure = _m.Zero;
                PreCalcMeasure = _m.BinaryOperator(PreCalcMeasure, f.Measure());
                PreCalcMeasure = _m.BinaryOperator(PreCalcMeasure, ft.Measure());
                PreCalcMeasure = _m.BinaryOperator(PreCalcMeasure, b.Measure());
            }
            else
            {
                throw new Exception("oops");
            }
        }
Example #8
0
 public SingleFingerTree(Monoid <M> m, T t)
 {
     _m = m;
     _t = t;
 }
Example #9
0
 public EmptyFingerTree(Monoid <M> m)
 {
     _m = m;
 }
Example #10
0
 public Digit(Monoid <V> m, List <U> uu)
 {
     M      = m;
     Digits = uu;
 }
Example #11
0
 public Digit(Monoid <V> m, U u1)
 {
     M = m;
     Digits.Add(u1);
 }