diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2013-09-23 21:16:57 +0200 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2013-09-23 21:17:16 +0200 |
| commit | bab10f5b93abaf9f75a538f291576d4789c30926 (patch) | |
| tree | 25ec817a5c0e41539a70297826ea50cca30fc254 | |
| parent | 5ae43acf945c6574cebccb6c5d1b3b5427deed70 (diff) | |
add subsequence_match(str, subseq) utility function
| -rw-r--r-- | src/string.cc | 17 | ||||
| -rw-r--r-- | src/string.hh | 1 | ||||
| -rw-r--r-- | src/unit_tests.cc | 5 |
3 files changed, 23 insertions, 0 deletions
diff --git a/src/string.cc b/src/string.cc index 870cdf9e..23457413 100644 --- a/src/string.cc +++ b/src/string.cc @@ -94,4 +94,21 @@ bool prefix_match(const String& str, const String& prefix) return true; } +bool subsequence_match(const String& str, const String& subseq) +{ + auto it = str.begin(); + for (auto& c : subseq) + { + if (it == str.end()) + return false; + while (*it != c) + { + if (++it == str.end()) + return false; + } + ++it; + } + return true; +} + } diff --git a/src/string.hh b/src/string.hh index 25e051dc..68317901 100644 --- a/src/string.hh +++ b/src/string.hh @@ -113,6 +113,7 @@ String to_string(const StronglyTypedNumber<RealType, ValueType>& val) } bool prefix_match(const String& str, const String& prefix); +bool subsequence_match(const String& str, const String& subseq); } diff --git a/src/unit_tests.cc b/src/unit_tests.cc index 589a83fe..e49f7b3a 100644 --- a/src/unit_tests.cc +++ b/src/unit_tests.cc @@ -141,6 +141,11 @@ void test_string() kak_assert(prefix_match("tchou kanaky", "tchou kanaky")); kak_assert(prefix_match("tchou kanaky", "t")); kak_assert(not prefix_match("tchou kanaky", "c")); + + kak_assert(subsequence_match("tchou kanaky", "tknky")); + kak_assert(subsequence_match("tchou kanaky", "knk")); + kak_assert(subsequence_match("tchou kanaky", "tchou kanaky")); + kak_assert(not subsequence_match("tchou kanaky", "tchou kanaky")); } void test_keys() |
