diff options
-rw-r--r-- | source/core/StarStringView.cpp | 17 | ||||
-rw-r--r-- | source/rendering/StarTextPainter.cpp | 3 |
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) { |