Reuse common prefix / common suffix functions
This commit is contained in:
parent
b468bf94e3
commit
1a0aa9b142
3 changed files with 71 additions and 79 deletions
|
|
@ -93,6 +93,55 @@ where
|
|||
rv
|
||||
}
|
||||
|
||||
/// Given two lookups and ranges calculates the length of the common prefix.
|
||||
pub fn common_prefix_len<Old, New>(
|
||||
old: &Old,
|
||||
old_range: Range<usize>,
|
||||
new: &New,
|
||||
new_range: Range<usize>,
|
||||
) -> usize
|
||||
where
|
||||
Old: Index<usize> + ?Sized,
|
||||
New: Index<usize> + ?Sized,
|
||||
New::Output: PartialEq<Old::Output>,
|
||||
{
|
||||
if is_empty_range(&old_range) || is_empty_range(&new_range) {
|
||||
return 0;
|
||||
}
|
||||
new_range
|
||||
.zip(old_range)
|
||||
.take_while(
|
||||
#[inline(always)]
|
||||
|x| new[x.0] == old[x.1],
|
||||
)
|
||||
.count()
|
||||
}
|
||||
|
||||
/// Given two lookups and ranges calculates the length of common suffix.
|
||||
pub fn common_suffix_len<Old, New>(
|
||||
old: &Old,
|
||||
old_range: Range<usize>,
|
||||
new: &New,
|
||||
new_range: Range<usize>,
|
||||
) -> usize
|
||||
where
|
||||
Old: Index<usize> + ?Sized,
|
||||
New: Index<usize> + ?Sized,
|
||||
New::Output: PartialEq<Old::Output>,
|
||||
{
|
||||
if is_empty_range(&old_range) || is_empty_range(&new_range) {
|
||||
return 0;
|
||||
}
|
||||
new_range
|
||||
.rev()
|
||||
.zip(old_range.rev())
|
||||
.take_while(
|
||||
#[inline(always)]
|
||||
|x| new[x.0] == old[x.1],
|
||||
)
|
||||
.count()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_unique() {
|
||||
let u = unique(&vec!['a', 'b', 'c', 'd', 'd', 'b'], 0..6)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue