ISegment GetFirstSearchResult (int startOffset, int endOffset) { if (startOffset < endOffset && this.selectedRegions.Count > 0) { ISegment region = new Segment (startOffset, endOffset - startOffset); foreach (ISegment segment in this.selectedRegions) { if (segment.Contains (startOffset) || segment.Contains (endOffset) || region.Contains (segment)) { return segment; } } } return null; }
ISegment GetFirstSearchResult (int startOffset, int endOffset) { if (startOffset < endOffset && this.selectedRegions.Count > 0) { ISegment region = new Segment (startOffset, endOffset - startOffset); int min = 0; int max = selectedRegions.Count - 1; do { int mid = (min + max) / 2; ISegment segment = selectedRegions[mid]; if (segment.Contains (startOffset) || segment.Contains (endOffset) || region.Contains (segment)) { if (mid == 0) return segment; ISegment prevSegment = selectedRegions[mid - 1]; if (!(prevSegment.Contains (startOffset) || prevSegment.Contains (endOffset) || region.Contains (prevSegment))) return segment; max = mid - 1; continue; } if (segment.Offset < endOffset) { min = mid + 1; } else { max = mid - 1; } } while (min <= max); } return null; }