Пример #1
0
        public void AddRange(int start, int end, bool overlappingFound)
        {
            if (Value == null)
            {
                Value = new Range(start, end);
                return;
            }

            var range = new Range(start, end);

            //if (Value.ContainsRange(range)) return;

            if (LeftRange != null && range.IsOnLeft(Value))
            {
                LeftRange.AddRange(start, end, overlappingFound || Value.IsOverlapping(range));

                if (MergeWith(LeftRange.Value))
                {
                    if (LeftRange.LeftRange == null && LeftRange.RightRange == null)
                    {
                        LeftRange = null;
                    }
                    else if (LeftRange.RightRange == null)
                    {
                        LeftRange = LeftRange.LeftRange;
                    }
                    else if (LeftRange.LeftRange == null)
                    {
                        LeftRange = LeftRange.RightRange;
                    }
                }
            }

            if (RightRange != null && range.IsOnRight(Value))
            {
                RightRange.AddRange(start, end, overlappingFound || Value.IsOverlapping(range));

                if (MergeWith(RightRange.Value))
                {
                    if (RightRange.LeftRange == null && RightRange.RightRange == null)
                    {
                        RightRange = null;
                    }
                    else if (RightRange.RightRange == null)
                    {
                        RightRange = RightRange.LeftRange;
                    }
                    else if (RightRange.LeftRange == null)
                    {
                        RightRange = RightRange.RightRange;
                    }
                }
            }

            MergeWith(range);

            if (!overlappingFound)
            {
                if (Value.IsOnFullRight(range))
                {
                    if (RightRange == null)
                    {
                        RightRange = new RangeNode();
                    }
                    RightRange.AddRange(range.Start, range.End, false);
                }
                else if (Value.IsOnFullLeft(range))
                {
                    if (LeftRange == null)
                    {
                        LeftRange = new RangeNode();
                    }
                    LeftRange.AddRange(range.Start, range.End, false);
                }
            }
        }