diff options
| author | Cameron Steffen <cam.steffen94@gmail.com> | 2021-06-21 21:21:18 -0500 |
|---|---|---|
| committer | Cameron Steffen <cam.steffen94@gmail.com> | 2021-07-28 16:13:46 -0500 |
| commit | 28f7890a29bd9531fb91295bc130a911820e9fb6 (patch) | |
| tree | d73324b1f60930ac277cf4ce644a96253ab4af75 | |
| parent | 5e4f2128e259194eabbb2feea3fa0470a3b3445f (diff) | |
| download | rust-28f7890a29bd9531fb91295bc130a911820e9fb6.tar.gz rust-28f7890a29bd9531fb91295bc130a911820e9fb6.zip | |
Add char array without ref Pattern impl
| -rw-r--r-- | library/core/src/str/pattern.rs | 41 |
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); } |
