Beispiel #1
0
        private ChartItemCollection CreateMultipleItemCollection(IEnumerable <ChartItem>[] chartItemsList, CollectionId id, IPen[] pens)
        {
            List <MultipleChartItem> mItems = new List <MultipleChartItem>(chartItemsList[0].Count());

            IEnumerator <ChartItem>[] its = new IEnumerator <ChartItem> [chartItemsList.Length];

            for (int i = 1; i < chartItemsList.Length; i++)
            {
                its[i] = chartItemsList[i].GetEnumerator();
                its[i].MoveNext();
            }

            double[] invalidValues = new double[chartItemsList.Length - 1];
            for (int i = 0; i < invalidValues.Length; i++)
            {
                invalidValues[i] = ChartItemCollection.valueNA;
            }
            foreach (var cItem in chartItemsList[0])
            {
                MultipleChartItem mItem = new MultipleChartItem()
                {
                    Date         = cItem.Date,
                    Value        = cItem.Value,
                    ValueChange  = cItem.ValueChange,
                    Values       = new List <double>(invalidValues),
                    ValueChanges = new List <double>(invalidValues)
                };

                for (int i = 1; i < chartItemsList.Length; i++)
                {
                    if (its[i].Current.Date > cItem.Date)
                    {
                        continue;
                    }

                    mItem.Values[i - 1]       = its[i].Current.Value;
                    mItem.ValueChanges[i - 1] = its[i].Current.ValueChange;
                    its[i].MoveNext();
                }
                mItems.Add(mItem);
            }

            return(new MultipleChartItemCollection(id, mItems, pens));
        }
Beispiel #2
0
        private ChartItemCollection CreateMultipleItemCollection(IEnumerable<ChartItem>[] chartItemsList, CollectionId id, IPen[] pens)
        {
            List<MultipleChartItem> mItems = new List<MultipleChartItem>(chartItemsList[0].Count());

            IEnumerator<ChartItem>[] its = new IEnumerator<ChartItem>[chartItemsList.Length];

            for (int i = 1; i < chartItemsList.Length; i++)
            {
                its[i] = chartItemsList[i].GetEnumerator();
                its[i].MoveNext();
            }

            double[] invalidValues = new double[chartItemsList.Length - 1];
            for(int i = 0; i < invalidValues.Length; i ++)
            {
                invalidValues[i] = ChartItemCollection.valueNA;
            }
            foreach (var cItem in chartItemsList[0])
            {
                MultipleChartItem mItem = new MultipleChartItem()
                {
                    Date = cItem.Date,
                    Value = cItem.Value,
                    ValueChange = cItem.ValueChange,
                    Values = new List<double>(invalidValues),
                    ValueChanges = new List<double>(invalidValues)
                };

                for(int i = 1; i < chartItemsList.Length; i ++)
                {
                    if (its[i].Current.Date > cItem.Date)
                    {
                        continue;
                    }

                    mItem.Values[i - 1] = its[i].Current.Value;
                    mItem.ValueChanges[i - 1] = its[i].Current.ValueChange;
                    its[i].MoveNext();
                }
                mItems.Add(mItem);
            }

            return new MultipleChartItemCollection(id, mItems, pens);    
        }
Beispiel #3
0
        private List <MultipleChartItem> Combine(List <MultipleChartItem> one, List <MultipleChartItem> other, int j)
        {
            ChartItemComparer comparar = new ChartItemComparer();
            int iOne   = 0;
            int iOther = 0;

            for (; iOther < other.Count; iOther++)
            {
                if (iOne >= one.Count)
                {
                    one.AddRange(other.Skip(iOther).Select(mItem =>
                    {
                        var tempItem = new MultipleChartItem()
                        {
                            Value        = ChartItemCollection.valueNA,
                            Date         = other[iOther].Date,
                            ValueChange  = ChartItemCollection.valueNA,
                            Values       = one[0].Values != null ? new List <double>(invalidValues) : null,
                            ValueChanges = one[0].ValueChanges != null ? new List <double>(invalidValues) : null
                        };

                        tempItem.Values[j]       = mItem.Value;
                        tempItem.ValueChanges[j] = mItem.ValueChange;

                        return(tempItem);
                    }));
                    break;
                }

                if (one[iOne].Date == other[iOther].Date)
                {
                    one[iOne].Values[j]       = other[iOther].Value;
                    one[iOne].ValueChanges[j] = other[iOther].ValueChange;
                    iOne++;
                }
                else if (one[iOne].Date > other[iOther].Date)
                {
                    var tempItem = new MultipleChartItem()
                    {
                        Value        = ChartItemCollection.valueNA,
                        Date         = other[iOther].Date,
                        ValueChange  = ChartItemCollection.valueNA,
                        Values       = one[0].Values != null ? new List <double>(invalidValues) : null,
                        ValueChanges = one[0].ValueChanges != null ? new List <double>(invalidValues) : null
                    };

                    tempItem.Values[j]       = other[iOther].Value;
                    tempItem.ValueChanges[j] = other[iOther].ValueChange;

                    one.Insert(iOne, tempItem);
                    iOne++;
                }
                else
                {
                    int iOneTemp = one.BinarySearch(iOne, one.Count - iOne, other[iOther], comparar);
                    if (iOneTemp < 0)
                    {
                        iOneTemp = ~iOneTemp;

                        if (iOneTemp == one.Count)
                        {
                            one.AddRange(other.Skip(iOther).Select(mItem =>
                            {
                                var tempItem = new MultipleChartItem()
                                {
                                    Value        = ChartItemCollection.valueNA,
                                    Date         = other[iOther].Date,
                                    ValueChange  = ChartItemCollection.valueNA,
                                    Values       = one[0].Values != null ? new List <double>(invalidValues) : null,
                                    ValueChanges = one[0].ValueChanges != null ? new List <double>(invalidValues) : null
                                };

                                tempItem.Values[j]       = mItem.Value;
                                tempItem.ValueChanges[j] = mItem.ValueChange;

                                return(tempItem);
                            }));
                            break;
                        }
                        else
                        {
                            var tempItem = new MultipleChartItem()
                            {
                                Value        = ChartItemCollection.valueNA,
                                Date         = other[iOther].Date,
                                ValueChange  = ChartItemCollection.valueNA,
                                Values       = one[0].Values != null ? new List <double>(invalidValues) : null,
                                ValueChanges = one[0].ValueChanges != null ? new List <double>(invalidValues) : null
                            };
                            tempItem.Values[j]       = other[iOther].Value;
                            tempItem.ValueChanges[j] = other[iOther].ValueChange;

                            one.Insert(iOneTemp, tempItem);
                            iOne = iOneTemp + 1;
                        }
                    }
                    else
                    {
                        one[iOneTemp].Values[j]       = other[iOther].Value;
                        one[iOneTemp].ValueChanges[j] = other[iOther].ValueChange;
                        iOne = iOneTemp + 1;
                    }
                }
            }

            return(one);
        }