Refactor to add a is_empty_range function
This commit is contained in:
parent
c0e37a9c67
commit
1cc4ec4d25
3 changed files with 14 additions and 6 deletions
|
|
@ -7,6 +7,7 @@ use std::ops::{Index, Range};
|
|||
use std::time::Instant;
|
||||
|
||||
use crate::algorithms::DiffHook;
|
||||
use crate::utils::is_empty_range;
|
||||
|
||||
/// Hunt–McIlroy / Hunt–Szymanski LCS diff algorithm.
|
||||
///
|
||||
|
|
@ -52,10 +53,10 @@ where
|
|||
D: DiffHook,
|
||||
New::Output: PartialEq<Old::Output>,
|
||||
{
|
||||
if new_range.start >= new_range.end {
|
||||
if is_empty_range(&new_range) {
|
||||
d.delete(old_range.start, old_range.len(), new_range.start)?;
|
||||
return Ok(());
|
||||
} else if old_range.start >= old_range.end {
|
||||
} else if is_empty_range(&old_range) {
|
||||
d.insert(old_range.start, new_range.start, new_range.len())?;
|
||||
return Ok(());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ use std::ops::{Index, IndexMut, Range};
|
|||
use std::time::Instant;
|
||||
|
||||
use crate::algorithms::DiffHook;
|
||||
use crate::utils::is_empty_range;
|
||||
|
||||
/// Myers' diff algorithm.
|
||||
///
|
||||
|
|
@ -171,7 +172,7 @@ where
|
|||
New: Index<usize> + ?Sized,
|
||||
New::Output: PartialEq<Old::Output>,
|
||||
{
|
||||
if old_range.start >= old_range.end || new_range.start >= new_range.end {
|
||||
if is_empty_range(&old_range) || is_empty_range(&new_range) {
|
||||
return 0;
|
||||
}
|
||||
new_range
|
||||
|
|
@ -352,15 +353,15 @@ where
|
|||
old_range.end -= common_suffix_len;
|
||||
new_range.end -= common_suffix_len;
|
||||
|
||||
if old_range.start >= old_range.end && new_range.start >= new_range.end {
|
||||
if is_empty_range(&old_range) && is_empty_range(&new_range) {
|
||||
// Do nothing
|
||||
} else if new_range.start >= new_range.end {
|
||||
} else if is_empty_range(&new_range) {
|
||||
d.delete(
|
||||
old_range.start,
|
||||
old_range.end - old_range.start,
|
||||
new_range.start,
|
||||
)?;
|
||||
} else if old_range.start >= old_range.end {
|
||||
} else if is_empty_range(&old_range) {
|
||||
d.insert(
|
||||
old_range.start,
|
||||
new_range.start,
|
||||
|
|
|
|||
|
|
@ -401,6 +401,12 @@ pub fn diff_lines<'x, T: DiffableStrRef + ?Sized>(
|
|||
.collect()
|
||||
}
|
||||
|
||||
/// Utility function to check if a range is empty that works on older rust versions
|
||||
#[inline(always)]
|
||||
pub(crate) fn is_empty_range<T: PartialOrd>(range: &Range<T>) -> bool {
|
||||
!(range.start < range.end)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_remapper() {
|
||||
let a = "foo bar baz";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue