diff options
| author | Neil <nyamatongwe@gmail.com> | 2018-05-03 07:48:10 +1000 | 
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2018-05-03 07:48:10 +1000 | 
| commit | 1a35c89b60c7e487d005c632b1e8f7e00eb961ab (patch) | |
| tree | f9feff77c62442889b3f838b649f6cdaa8607b13 /src/PositionCache.cxx | |
| parent | a3e6fe8011067ef22c673342b40b1f924c06b3c1 (diff) | |
| download | scintilla-mirror-1a35c89b60c7e487d005c632b1e8f7e00eb961ab.tar.gz | |
Use Range and Position in more cases to avoid casts.
Diffstat (limited to 'src/PositionCache.cxx')
| -rw-r--r-- | src/PositionCache.cxx | 33 | 
1 files changed, 18 insertions, 15 deletions
| diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx index 88415abfe..8ed0580bb 100644 --- a/src/PositionCache.cxx +++ b/src/PositionCache.cxx @@ -177,9 +177,11 @@ void LineLayout::RestoreBracesHighlight(Range rangeLine, const Sci::Position bra  	xHighlightGuide = 0;  } -int LineLayout::FindBefore(XYPOSITION x, int lower, int upper) const { +int LineLayout::FindBefore(XYPOSITION x, Range range) const { +	Sci::Position lower = range.start; +	Sci::Position upper = range.end;  	do { -		const int middle = (upper + lower + 1) / 2; 	// Round high +		const Sci::Position middle = (upper + lower + 1) / 2; 	// Round high  		const XYPOSITION posMiddle = positions[middle];  		if (x < posMiddle) {  			upper = middle - 1; @@ -187,12 +189,12 @@ int LineLayout::FindBefore(XYPOSITION x, int lower, int upper) const {  			lower = middle;  		}  	} while (lower < upper); -	return lower; +	return static_cast<int>(lower);  }  int LineLayout::FindPositionFromX(XYPOSITION x, Range range, bool charPosition) const { -	int pos = FindBefore(x, static_cast<int>(range.start), static_cast<int>(range.end)); +	int pos = FindBefore(x, range);  	while (pos < range.end) {  		if (charPosition) {  			if (x < (positions[pos + 1])) { @@ -429,13 +431,14 @@ void SpecialRepresentations::Clear() {  	std::fill(startByteHasReprs, std::end(startByteHasReprs), none);  } -void BreakFinder::Insert(int val) { -	if (val > nextBreak) { -		const std::vector<int>::iterator it = std::lower_bound(selAndEdge.begin(), selAndEdge.end(), val); +void BreakFinder::Insert(Sci::Position val) { +	int posInLine = static_cast<int>(val); +	if (posInLine > nextBreak) { +		const std::vector<int>::iterator it = std::lower_bound(selAndEdge.begin(), selAndEdge.end(), posInLine);  		if (it == selAndEdge.end()) { -			selAndEdge.push_back(val); -		} else if (*it != val) { -			selAndEdge.insert(it, 1, val); +			selAndEdge.push_back(posInLine); +		} else if (*it != posInLine) { +			selAndEdge.insert(it, 1, posInLine);  		}  	}  } @@ -456,7 +459,7 @@ BreakFinder::BreakFinder(const LineLayout *ll_, const Selection *psel, Range lin  	// Search for first visible break  	// First find the first visible character  	if (xStart > 0.0f) -		nextBreak = ll->FindBefore(static_cast<XYPOSITION>(xStart), static_cast<int>(lineRange.start), static_cast<int>(lineRange.end)); +		nextBreak = ll->FindBefore(static_cast<XYPOSITION>(xStart), lineRange);  	// Now back to a style break  	while ((nextBreak > lineRange.start) && (ll->styles[nextBreak] == ll->styles[nextBreak - 1])) {  		nextBreak--; @@ -470,9 +473,9 @@ BreakFinder::BreakFinder(const LineLayout *ll_, const Selection *psel, Range lin  			const SelectionSegment portion = psel->Range(r).Intersect(segmentLine);  			if (!(portion.start == portion.end)) {  				if (portion.start.IsValid()) -					Insert(static_cast<int>(portion.start.Position() - posLineStart)); +					Insert(portion.start.Position() - posLineStart);  				if (portion.end.IsValid()) -					Insert(static_cast<int>(portion.end.Position() - posLineStart)); +					Insert(portion.end.Position() - posLineStart);  			}  		}  	} @@ -481,14 +484,14 @@ BreakFinder::BreakFinder(const LineLayout *ll_, const Selection *psel, Range lin  			if (pvsDraw->indicators[deco->Indicator()].OverridesTextFore()) {  				Sci::Position startPos = deco->EndRun(posLineStart);  				while (startPos < (posLineStart + lineRange.end)) { -					Insert(static_cast<int>(startPos - posLineStart)); +					Insert(startPos - posLineStart);  					startPos = deco->EndRun(startPos);  				}  			}  		}  	}  	Insert(ll->edgeColumn); -	Insert(static_cast<int>(lineRange.end)); +	Insert(lineRange.end);  	saeNext = (!selAndEdge.empty()) ? selAndEdge[0] : -1;  } | 
