Esempio n. 1
0
        public static double Average <TCollect, T>(ref TCollect collect)
            where TCollect : struct, ICollectionWrapper <T>
        {
            long number = 0;
            T    sum    = default(T);

            if (collect.HasIndexOverhead)
            {
                while (collect.HasNext)
                {
                    checked
                    {
                        ++number;
                        sum = NumberOperators <T> .Sum(sum, collect.Value);
                    }
                }
            }
            else
            {
                for (var size = collect.Size; number < size;)
                {
                    checked
                    {
                        sum = NumberOperators <T> .Sum(sum, collect[(uint)number]);

                        ++number;
                    }
                }
            }


            return(number > 0 ? NumberOperators <T> .DivDouble(sum, number) : 0);
        }
Esempio n. 2
0
        public static T SumMeta <TCollect, T>(ref TCollect collect)
            where TCollect : struct, ICollectionWrapper <T>
        {
            var sum = default(T);

            if (collect.HasIndexOverhead)
            {
                while (collect.HasNext)
                {
                    checked
                    {
                        sum = NumberOperators <T> .Sum(sum, collect.Value);
                    }
                }
            }
            else
            {
                var size = collect.Size;
                for (var i = 0u; i < size; ++i)
                {
                    checked
                    {
                        sum = NumberOperators <T> .Sum(sum, collect[i]);
                    }
                }
            }

            return(sum);
        }
Esempio n. 3
0
 public bool Equals(T x, T y)
 {
     return(NumberOperators <T> .Eq(x, y));
 }
Esempio n. 4
0
 public NumberOperatorsBuilder(NumberOperators operators)
 {
     this.numbers = operators;
 }
Esempio n. 5
0
 public float Invoke(T a, float b)
 {
     return(NumberOperators <T> .DivFloat(a, b));
 }
Esempio n. 6
0
        public static StatisticInfo <T>?GetStatisticMeta <TCollect, T>(ref TCollect collect, StatisticValue value)
            where TCollect : struct, ICollectionWrapper <T>
        {
            if (collect.HasIndexOverhead)
            {
                if (collect.HasNext)
                {
                    var item    = collect.Value;
                    var count   = 1u;
                    var sum     = item;
                    var product = item;
                    var minus   = item;

                    switch (value)
                    {
                    case StatisticValue.Sum:
                        while (collect.HasNext)
                        {
                            item = collect.Value;
                            checked
                            {
                                sum = NumberOperators <T> .Sum(sum, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Sum = new Option <T>(sum),
                            Count = count,
                        });

                    case StatisticValue.Minus:
                        while (collect.HasNext)
                        {
                            item = collect.Value;
                            checked
                            {
                                minus = NumberOperators <T> .Minus(minus, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Count = count,
                            Minus = new Option <T>(minus),
                        });

                    case StatisticValue.Product:
                        while (collect.HasNext)
                        {
                            item = collect.Value;
                            checked
                            {
                                product = NumberOperators <T> .Product(product, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Count = count,
                            Product = new Option <T>(product),
                        });

                    case StatisticValue.All:
                        while (collect.HasNext)
                        {
                            item = collect.Value;
                            checked
                            {
                                sum = NumberOperators <T> .Sum(sum, item);

                                minus = NumberOperators <T> .Minus(minus, item);

                                product = NumberOperators <T> .Product(product, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Sum = new Option <T>(sum),
                            Count = count,
                            Minus = new Option <T>(minus),
                            Product = new Option <T>(product),
                        });

                    case StatisticValue.SumMinus:
                        while (collect.HasNext)
                        {
                            item = collect.Value;
                            checked
                            {
                                sum = NumberOperators <T> .Sum(sum, item);

                                minus = NumberOperators <T> .Minus(minus, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Sum = new Option <T>(sum),
                            Count = count,
                            Minus = new Option <T>(minus),
                        });

                    case StatisticValue.SumProduct:
                        while (collect.HasNext)
                        {
                            item = collect.Value;
                            checked
                            {
                                sum = NumberOperators <T> .Sum(sum, item);

                                product = NumberOperators <T> .Product(product, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Sum = new Option <T>(sum),
                            Count = count,
                            Product = new Option <T>(product),
                        });

                    case StatisticValue.MinusProduct:
                        while (collect.HasNext)
                        {
                            item = collect.Value;
                            checked
                            {
                                minus = NumberOperators <T> .Minus(minus, item);

                                product = NumberOperators <T> .Product(product, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Count = count,
                            Minus = new Option <T>(minus),
                            Product = new Option <T>(product),
                        });
                    }
                }
            }
            else
            {
                var size = collect.Size;
                if (size > 0)
                {
                    var item    = collect[0];
                    var count   = 1u;
                    var sum     = item;
                    var minus   = item;
                    var product = item;

                    switch (value)
                    {
                    case StatisticValue.Sum:
                        while (count < size)
                        {
                            item = collect[count];
                            checked
                            {
                                sum = NumberOperators <T> .Sum(sum, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Sum = new Option <T>(sum),
                            Count = count,
                        });

                    case StatisticValue.Minus:
                        while (count < size)
                        {
                            item = collect[count];
                            checked
                            {
                                minus = NumberOperators <T> .Minus(minus, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Count = count,
                            Minus = new Option <T>(minus),
                        });

                    case StatisticValue.Product:
                        while (count < size)
                        {
                            item = collect[count];
                            checked
                            {
                                product = NumberOperators <T> .Product(product, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Count = count,
                            Product = new Option <T>(product),
                        });

                    case StatisticValue.All:
                        while (count < size)
                        {
                            item = collect[count];
                            checked
                            {
                                sum = NumberOperators <T> .Sum(sum, item);

                                minus = NumberOperators <T> .Minus(minus, item);

                                product = NumberOperators <T> .Product(product, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Sum = new Option <T>(sum),
                            Count = count,
                            Minus = new Option <T>(minus),
                            Product = new Option <T>(product),
                        });

                    case StatisticValue.SumMinus:
                        while (count < size)
                        {
                            item = collect[count];
                            checked
                            {
                                sum = NumberOperators <T> .Sum(sum, item);

                                minus = NumberOperators <T> .Minus(minus, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Sum = new Option <T>(sum),
                            Count = count,
                            Minus = new Option <T>(minus),
                        });

                    case StatisticValue.SumProduct:
                        while (count < size)
                        {
                            item = collect[count];
                            checked
                            {
                                sum = NumberOperators <T> .Sum(sum, item);

                                product = NumberOperators <T> .Product(product, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Sum = new Option <T>(sum),
                            Count = count,
                            Product = new Option <T>(product),
                        });

                    case StatisticValue.MinusProduct:
                        while (count < size)
                        {
                            item = collect[count];
                            checked
                            {
                                minus = NumberOperators <T> .Minus(minus, item);

                                product = NumberOperators <T> .Product(product, item);

                                count += 1;
                            }
                        }

                        return(new StatisticInfo <T>
                        {
                            Count = count,
                            Minus = new Option <T>(minus),
                            Product = new Option <T>(product),
                        });
                    }
                }
            }

            return(null);
        }
Esempio n. 7
0
 public bool Invoke(T a, T b)
 {
     return(NumberOperators <T> .GreatThan(a, b));
 }
 public NumberOperatorsBuilder(NumberOperators operators)
 {
     this.numbers = operators;
 }
Esempio n. 9
0
 public bool Invoke(T a, T b)
 {
     return(NumberOperators <T> .Eq(a, b));
 }
Esempio n. 10
0
 public double Invoke(T a, double b)
 {
     return(NumberOperators <T> .DivDouble(a, b));
 }
Esempio n. 11
0
 public T Invoke(T a, T b)
 {
     return(NumberOperators <T> .Minus(a, b));
 }