Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/core/StarStringView.cpp17
-rw-r--r--source/rendering/StarTextPainter.cpp3
2 files changed, 12 insertions, 8 deletions
diff --git a/source/core/StarStringView.cpp b/source/core/StarStringView.cpp
index 2bc9cd5..535d350 100644
--- a/source/core/StarStringView.cpp
+++ b/source/core/StarStringView.cpp
@@ -113,8 +113,11 @@ bool StringView::beginsWith(StringView beg, CaseSensitivity cs) const {
auto it = begin();
auto itEnd = end();
for (size_t i = 0; i != begSize; ++i)
- if (it++ == itEnd)
+ {
+ if (it == itEnd)
return false;
+ it++;
+ }
return compare(0, begSize, beg, 0, NPos, cs) == 0;
}
@@ -352,18 +355,20 @@ StringView StringView::substr(size_t position, size_t n) const {
auto it = begin();
for (size_t i = 0; i != position; ++i) {
- if (it++ == itEnd)
+ if (it == itEnd)
throw OutOfRangeException(strf("out of range in StringView::substr({}, {})", position, n));
+ it++;
}
- const char* start = &*it.base();
+ const auto itStart = it;
for (size_t i = 0; i != n; ++i) {
- if (it++ == itEnd)
- return StringView(start, &*it.base() - start - 1);
+ if (it == itEnd)
+ break;
+ ++it;
}
- return StringView(start, &*it.base() - start);
+ return StringView(&*itStart.base(), it.base() - itStart.base());
}
int StringView::compare(size_t selfOffset, size_t selfLen, StringView other,
diff --git a/source/rendering/StarTextPainter.cpp b/source/rendering/StarTextPainter.cpp
index 7fc02bc..76670ff 100644
--- a/source/rendering/StarTextPainter.cpp
+++ b/source/rendering/StarTextPainter.cpp
@@ -139,8 +139,7 @@ bool TextPainter::processWrapText(StringView text, unsigned* wrapWidth, WrapText
bool finished = true;
auto slice = [](StringView::const_iterator a, StringView::const_iterator b) -> StringView {
- const char* aPtr = &*a.base();
- return StringView(aPtr, &*b.base() - aPtr);
+ return StringView(&*a.base(), b.base() - a.base());
};
while (iterator != end) {