From 1671e097a24cd169f1ad4ea89b0cb3ae105b1e70 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 17 Jan 2023 17:21:55 +0100 Subject: Add basic Collator::find() method. --- src/lib/collator.cc | 21 +++++++++++++++++++++ src/lib/collator.h | 1 + 2 files changed, 22 insertions(+) (limited to 'src/lib') diff --git a/src/lib/collator.cc b/src/lib/collator.cc index 7bab36fa6..ba504fb6e 100644 --- a/src/lib/collator.cc +++ b/src/lib/collator.cc @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -79,3 +80,23 @@ Collator::compare (string const& utf8_a, string const& utf8_b) const } } + +bool +Collator::find(string pattern, string text) const +{ + if (_collator) { + auto utf16_pattern = utf8_to_utf16(pattern); + auto utf16_text = utf8_to_utf16(text); + UErrorCode status = U_ZERO_ERROR; + auto search = usearch_openFromCollator(utf16_pattern.data(), -1, utf16_text.data(), -1, _collator, nullptr, &status); + DCPOMATIC_ASSERT(search); + auto const index = usearch_first(search, &status); + usearch_close(search); + return index != -1; + } else { + transform(pattern.begin(), pattern.end(), pattern.begin(), ::tolower); + transform(text.begin(), text.end(), text.begin(), ::tolower); + return pattern.find(text) != string::npos; + } +} + diff --git a/src/lib/collator.h b/src/lib/collator.h index d42278124..1768c43c0 100644 --- a/src/lib/collator.h +++ b/src/lib/collator.h @@ -39,6 +39,7 @@ public: Collator& operator=(Collator const&) = delete; int compare(std::string const& utf8_a, std::string const& utf8_b) const; + bool find(std::string pattern, std::string text) const; private: UCollator* _collator = nullptr; -- cgit v1.2.3