/// <summary>
        /// Unions the current range set with the given range set.
        /// </summary>
        public void Union(SelectableRangeSet unionTo)
        {
            List <SelectableRange> inputSet = unionTo.rangeSet;

            int inSz = inputSet.Count;
            int n    = 0;

            while (n < inSz)
            {
                SelectableRange        inRange = (SelectableRange)inputSet[n];
                int                    sz      = rangeSet.Count;
                List <SelectableRange> i       = rangeSet.GetRange(0, rangeSet.Count);
                int                    j       = 0;
                while (j < i.Count)
                {
                    SelectableRange range = i[j];
                    if (RangeIntersectedBy(inRange, range))
                    {
                        i.RemoveAt(j);
                        inRange = ChangeRangeSizeToEncompass(inRange, range);
                    }
                    j++;
                }

                // Insert into sorted position
                RangePosition startPoint = inRange.StartPosition;
                DataObject    start      = inRange.Start;
                RangePosition endPoint   = inRange.EndPosition;
                DataObject    end        = inRange.End;

                if (start == SelectableRange.FirstInSet)
                {
                    rangeSet.Insert(0, inRange);
                }
                else
                {
                    DataObject startCell = start;
                    i = rangeSet.GetRange(0, rangeSet.Count);
                    j = 0;
                    while (j < i.Count)
                    {
                        SelectableRange range    = i[j];
                        DataObject      curStart = range.Start;
                        if (curStart != SelectableRange.FirstInSet)
                        {
                            if (curStart.CompareTo(startCell) > 0)
                            {
                                i[j] = i[j - 1];
                                break;
                            }
                        }
                        j++;
                    }
                    i.Add(inRange);
                }
                n++;
            }
        }
        /// <summary>
        /// Unions the current range set with the given range set.
        /// </summary>
        public void Union(SelectableRangeSet unionTo)
        {
            List<SelectableRange> inputSet = unionTo.rangeSet;

            int inSz = inputSet.Count;
            int n = 0;
            while (n < inSz) {
                SelectableRange inRange = (SelectableRange)inputSet[n];
                int sz = rangeSet.Count;
                List<SelectableRange> i = rangeSet.GetRange(0, rangeSet.Count);
                int j = 0;
                while (j < i.Count) {
                    SelectableRange range = i[j];
                    if (RangeIntersectedBy(inRange, range)) {
                        i.RemoveAt(j);
                        inRange = ChangeRangeSizeToEncompass(inRange, range);
                    }
                    j++;
                }

                // Insert into sorted position
                RangePosition startPoint = inRange.StartPosition;
                DataObject start = inRange.Start;
                RangePosition endPoint = inRange.EndPosition;
                DataObject end = inRange.End;

                if (start == SelectableRange.FirstInSet) {
                    rangeSet.Insert(0, inRange);
                } else {
                    DataObject startCell = start;
                    i = rangeSet.GetRange(0, rangeSet.Count);
                    j = 0;
                    while (j < i.Count) {
                        SelectableRange range = i[j];
                        DataObject curStart = range.Start;
                        if (curStart != SelectableRange.FirstInSet) {
                            if (curStart.CompareTo(startCell) > 0) {
                                i[j] = i[j - 1];
                                break;
                            }
                        }
                        j++;
                    }
                    i.Add(inRange);
                }
                n++;
            }
        }