about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCameron Steffen <cam.steffen94@gmail.com>2021-06-21 21:21:18 -0500
committerCameron Steffen <cam.steffen94@gmail.com>2021-07-28 16:13:46 -0500
commit28f7890a29bd9531fb91295bc130a911820e9fb6 (patch)
treed73324b1f60930ac277cf4ce644a96253ab4af75
parent5e4f2128e259194eabbb2feea3fa0470a3b3445f (diff)
downloadrust-28f7890a29bd9531fb91295bc130a911820e9fb6.tar.gz
rust-28f7890a29bd9531fb91295bc130a911820e9fb6.zip
Add char array without ref Pattern impl
-rw-r--r--library/core/src/str/pattern.rs41
1 files changed, 37 insertions, 4 deletions
diff --git a/library/core/src/str/pattern.rs b/library/core/src/str/pattern.rs
index 90e5fbdf08e..031fb8e8b21 100644
--- a/library/core/src/str/pattern.rs
+++ b/library/core/src/str/pattern.rs
@@ -608,6 +608,13 @@ where
     }
 }
 
+impl<const N: usize> MultiCharEq for [char; N] {
+    #[inline]
+    fn matches(&mut self, c: char) -> bool {
+        self.iter().any(|&m| m == c)
+    }
+}
+
 impl<const N: usize> MultiCharEq for &[char; N] {
     #[inline]
     fn matches(&mut self, c: char) -> bool {
@@ -768,7 +775,13 @@ macro_rules! searcher_methods {
 
 /// Associated type for `<[char; N] as Pattern<'a>>::Searcher`.
 #[derive(Clone, Debug)]
-pub struct CharArraySearcher<'a, 'b, const N: usize>(
+pub struct CharArraySearcher<'a, const N: usize>(
+    <MultiCharEqPattern<[char; N]> as Pattern<'a>>::Searcher,
+);
+
+/// Associated type for `<&[char; N] as Pattern<'a>>::Searcher`.
+#[derive(Clone, Debug)]
+pub struct CharArrayRefSearcher<'a, 'b, const N: usize>(
     <MultiCharEqPattern<&'b [char; N]> as Pattern<'a>>::Searcher,
 );
 
@@ -777,18 +790,38 @@ pub struct CharArraySearcher<'a, 'b, const N: usize>(
 /// # Examples
 ///
 /// ```
+/// assert_eq!("Hello world".find(['l', 'l']), Some(2));
+/// assert_eq!("Hello world".find(['l', 'l']), Some(2));
+/// ```
+impl<'a, const N: usize> Pattern<'a> for [char; N] {
+    pattern_methods!(CharArraySearcher<'a, N>, MultiCharEqPattern, CharArraySearcher);
+}
+
+unsafe impl<'a, const N: usize> Searcher<'a> for CharArraySearcher<'a, N> {
+    searcher_methods!(forward);
+}
+
+unsafe impl<'a, const N: usize> ReverseSearcher<'a> for CharArraySearcher<'a, N> {
+    searcher_methods!(reverse);
+}
+
+/// Searches for chars that are equal to any of the [`char`]s in the array.
+///
+/// # Examples
+///
+/// ```
 /// assert_eq!("Hello world".find(&['l', 'l']), Some(2));
 /// assert_eq!("Hello world".find(&['l', 'l']), Some(2));
 /// ```
 impl<'a, 'b, const N: usize> Pattern<'a> for &'b [char; N] {
-    pattern_methods!(CharArraySearcher<'a, 'b, N>, MultiCharEqPattern, CharArraySearcher);
+    pattern_methods!(CharArrayRefSearcher<'a, 'b, N>, MultiCharEqPattern, CharArrayRefSearcher);
 }
 
-unsafe impl<'a, 'b, const N: usize> Searcher<'a> for CharArraySearcher<'a, 'b, N> {
+unsafe impl<'a, 'b, const N: usize> Searcher<'a> for CharArrayRefSearcher<'a, 'b, N> {
     searcher_methods!(forward);
 }
 
-unsafe impl<'a, 'b, const N: usize> ReverseSearcher<'a> for CharArraySearcher<'a, 'b, N> {
+unsafe impl<'a, 'b, const N: usize> ReverseSearcher<'a> for CharArrayRefSearcher<'a, 'b, N> {
     searcher_methods!(reverse);
 }