예제 #1
0
        /// <summary>
        /// Попытка разметить интервал
        /// </summary>
        /// <param name="startPosition">начало интервала</param>
        /// <param name="endPosition">конец интервала</param>
        /// <returns>true, если интервал был размечен</returns>
        public bool TryMarkText(int startPosition, int endPosition)
        {
            bool           result   = true;
            int            index    = -1;
            MarkedInterval interval = new MarkedInterval()
            {
                Start = startPosition, End = endPosition
            };

            for (index = 0; index < _map.Count; ++index)
            {
                if (_map[index].IsIntersect(interval))
                {
                    result = false;
                    break;
                }
                else if (interval.End <= _map[index].Start)
                {
                    break;
                }
            }
            if (result)
            {
                if (index > 0)
                /// возможное соединение нового интервала с предыдущим
                {
                    MarkedInterval previous = _map[index - 1];
                    if (previous.End == interval.Start)
                    {
                        interval.Start = previous.Start;
                        --index;
                        _map.RemoveAt(index);
                    }
                }
                if (_map.Count > index)
                /// возможное соединение нового интервала со следующим
                {
                    MarkedInterval next = _map[index];
                    if (next.Start == interval.End)
                    {
                        interval.End = next.End;
                        _map.RemoveAt(index);
                    }
                }
                _map.Insert(index, interval);
            }
            return(result);
        }
예제 #2
0
 /// <summary>
 /// Проверка, что заданный интервал пересекается с текущим
 /// </summary>
 /// <param name="interval">интервал</param>
 /// <returns>результат проверки</returns>
 public bool IsIntersect(MarkedInterval interval)
 {
     return(IsContainPosition(interval.Start) || IsContainPosition(interval.End - 1) ||
            interval.IsContainPosition(Start) || interval.IsContainPosition(End - 1));
 }