From 91c9b3addf5f3db972fd28752855eda811221afe Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Fri, 2 May 2025 15:16:35 +0200 Subject: different action depending on file extension --- lib/nes/common/containers/string-view.cc | 56 +++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 9 deletions(-) (limited to 'lib/nes/common/containers/string-view.cc') diff --git a/lib/nes/common/containers/string-view.cc b/lib/nes/common/containers/string-view.cc index 8265d09..e3470c0 100644 --- a/lib/nes/common/containers/string-view.cc +++ b/lib/nes/common/containers/string-view.cc @@ -15,6 +15,16 @@ namespace nes } return res; } + + auto to_uppercase(char const c) -> char + { + if (c >= 'a' && c <= 'z') + { + return static_cast(c - 'a' + 'A'); + } + + return c; + } } // namespace string_view::string_view(span const data) @@ -44,6 +54,28 @@ namespace nes return data_[data_.get_length() - 1]; } + auto string_view::compare(string_view const other, case_sensitive const sensitive) const -> bool + { + if (get_length() != other.get_length()) { return false; } + + for (auto i = u32{ 0 }; i < get_length(); ++i) + { + auto const a = (*this)[i]; + auto const b = other[i]; + + if (sensitive == case_sensitive::yes) + { + if (a != b) { return false; } + } + else + { + if (to_uppercase(a) != to_uppercase(b)) { return false; } + } + } + + return true; + } + auto string_view::contains(char const needle) const -> bool { for (const auto c : *this) @@ -63,19 +95,25 @@ namespace nes return string_view{ data_.subspan(first, length) }; } - auto operator==(string_view const lhs, string_view const rhs) -> bool + auto string_view::has_prefix(string_view const prefix, case_sensitive const case_sensitive) const -> bool { - if (lhs.get_length() != rhs.get_length()) { return false; } + if (prefix.get_length() > get_length()) { return false; } + return substring(0, prefix.get_length()).compare(prefix, case_sensitive); + } - for (auto i = u32{ 0 }; i < lhs.get_length(); ++i) - { - if (lhs[i] != rhs[i]) { return false; } - } + auto string_view::has_suffix(string_view const suffix, case_sensitive const case_sensitive) const -> bool + { + if (suffix.get_length() > get_length()) { return false; } + return substring(get_length() - suffix.get_length()).compare(suffix, case_sensitive); + } - return true; + auto operator==(string_view const lhs, string_view const rhs) -> bool + { + return lhs.compare(rhs); } + auto operator!=(string_view const lhs, string_view const rhs) -> bool { - return !(lhs == rhs); + return !lhs.compare(rhs); } -} // namespace nes \ No newline at end of file +} // namespace nes -- cgit v1.3.1