summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/contrib/string_view.h24
1 files changed, 16 insertions, 8 deletions
diff --git a/apt-pkg/contrib/string_view.h b/apt-pkg/contrib/string_view.h
index 5b6411a33..d4ff80028 100644
--- a/apt-pkg/contrib/string_view.h
+++ b/apt-pkg/contrib/string_view.h
@@ -29,6 +29,7 @@ class StringView {
public:
static constexpr size_t npos = static_cast<size_t>(-1);
+ static_assert(APT::StringView::npos == std::string::npos, "npos values are different");
/* Constructors */
constexpr StringView() : data_(""), size_(0) {}
@@ -43,10 +44,15 @@ public:
return StringView(data_ + pos, n > (size_ - pos) ? (size_ - pos) : n);
}
- size_t find(int c, size_t pos=0) const {
- if (pos != 0)
- return substr(pos).find(c);
-
+ size_t find(int c, size_t pos) const {
+ if (pos == 0)
+ return find(c);
+ size_t const found = substr(pos).find(c);
+ if (found == npos)
+ return npos;
+ return pos + found;
+ }
+ size_t find(int c) const {
const char *found = static_cast<const char*>(memchr(data_, c, size_));
if (found == NULL)
@@ -55,10 +61,12 @@ public:
return found - data_;
}
- size_t rfind(int c, size_t pos=npos) const {
- if (pos != npos)
- return substr(0, pos).rfind(c);
-
+ size_t rfind(int c, size_t pos) const {
+ if (pos == npos)
+ return rfind(c);
+ return APT::StringView(data_, pos).rfind(c);
+ }
+ size_t rfind(int c) const {
const char *found = static_cast<const char*>(memrchr(data_, c, size_));
if (found == NULL)