aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/Selection.cxx27
-rw-r--r--src/Selection.h12
2 files changed, 21 insertions, 18 deletions
diff --git a/src/Selection.cxx b/src/Selection.cxx
index 53559e329..48cebb16c 100644
--- a/src/Selection.cxx
+++ b/src/Selection.cxx
@@ -230,7 +230,7 @@ SelectionSegment Selection::Limits() const noexcept {
}
}
-SelectionSegment Selection::LimitsForRectangularElseMain() const {
+SelectionSegment Selection::LimitsForRectangularElseMain() const noexcept {
if (IsRectangular()) {
return Limits();
} else {
@@ -343,10 +343,12 @@ void Selection::TrimOtherSelections(size_t r, SelectionRange range) noexcept {
}
}
-void Selection::SetSelection(SelectionRange range) {
- ranges.clear();
- ranges.push_back(range);
- mainRange = ranges.size() - 1;
+void Selection::SetSelection(SelectionRange range) noexcept {
+ if (ranges.size() > 1) {
+ ranges.erase(ranges.begin() + 1, ranges.end());
+ }
+ ranges[0] = range;
+ mainRange = 0;
}
void Selection::AddSelection(SelectionRange range) {
@@ -360,7 +362,7 @@ void Selection::AddSelectionWithoutTrim(SelectionRange range) {
mainRange = ranges.size() - 1;
}
-void Selection::DropSelection(size_t r) {
+void Selection::DropSelection(size_t r) noexcept {
if ((ranges.size() > 1) && (r < ranges.size())) {
size_t mainNew = mainRange;
if (mainNew >= r) {
@@ -375,7 +377,7 @@ void Selection::DropSelection(size_t r) {
}
}
-void Selection::DropAdditionalRanges() {
+void Selection::DropAdditionalRanges() noexcept {
SetSelection(RangeMain());
}
@@ -425,17 +427,18 @@ Sci::Position Selection::VirtualSpaceFor(Sci::Position pos) const noexcept {
return virtualSpace;
}
-void Selection::Clear() {
- ranges.clear();
- ranges.emplace_back();
- mainRange = ranges.size() - 1;
+void Selection::Clear() noexcept {
+ if (ranges.size() > 1) {
+ ranges.erase(ranges.begin() + 1, ranges.end());
+ }
+ mainRange = 0;
selType = SelTypes::stream;
moveExtends = false;
ranges[mainRange].Reset();
rangeRectangular.Reset();
}
-void Selection::RemoveDuplicates() {
+void Selection::RemoveDuplicates() noexcept {
for (size_t i=0; i<ranges.size()-1; i++) {
if (ranges[i].Empty()) {
size_t j=i+1;
diff --git a/src/Selection.h b/src/Selection.h
index 03ce5083c..9f7d73c3c 100644
--- a/src/Selection.h
+++ b/src/Selection.h
@@ -166,7 +166,7 @@ public:
// This is for when you want to move the caret in response to a
// user direction command - for rectangular selections, use the range
// that covers all selected text otherwise return the main selection.
- SelectionSegment LimitsForRectangularElseMain() const;
+ SelectionSegment LimitsForRectangularElseMain() const noexcept;
size_t Count() const noexcept;
size_t Main() const noexcept;
void SetMain(size_t r) noexcept;
@@ -183,19 +183,19 @@ public:
void MovePositions(bool insertion, Sci::Position startChange, Sci::Position length) noexcept;
void TrimSelection(SelectionRange range) noexcept;
void TrimOtherSelections(size_t r, SelectionRange range) noexcept;
- void SetSelection(SelectionRange range);
+ void SetSelection(SelectionRange range) noexcept;
void AddSelection(SelectionRange range);
void AddSelectionWithoutTrim(SelectionRange range);
- void DropSelection(size_t r);
- void DropAdditionalRanges();
+ void DropSelection(size_t r) noexcept;
+ void DropAdditionalRanges() noexcept;
void TentativeSelection(SelectionRange range);
void CommitTentative() noexcept;
InSelection RangeType(size_t r) const noexcept;
InSelection CharacterInSelection(Sci::Position posCharacter) const noexcept;
InSelection InSelectionForEOL(Sci::Position pos) const noexcept;
Sci::Position VirtualSpaceFor(Sci::Position pos) const noexcept;
- void Clear();
- void RemoveDuplicates();
+ void Clear() noexcept;
+ void RemoveDuplicates() noexcept;
void RotateMain() noexcept;
bool Tentative() const noexcept { return tentativeMain; }
std::vector<SelectionRange> RangesCopy() const {