summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-09-23 21:16:57 +0200
committerMaxime Coste <frrrwww@gmail.com>2013-09-23 21:17:16 +0200
commitbab10f5b93abaf9f75a538f291576d4789c30926 (patch)
tree25ec817a5c0e41539a70297826ea50cca30fc254
parent5ae43acf945c6574cebccb6c5d1b3b5427deed70 (diff)
add subsequence_match(str, subseq) utility function
-rw-r--r--src/string.cc17
-rw-r--r--src/string.hh1
-rw-r--r--src/unit_tests.cc5
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()