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 std::time::Instant;
|
||||||
|
|
||||||
use crate::algorithms::DiffHook;
|
use crate::algorithms::DiffHook;
|
||||||
|
use crate::utils::is_empty_range;
|
||||||
|
|
||||||
/// Hunt–McIlroy / Hunt–Szymanski LCS diff algorithm.
|
/// Hunt–McIlroy / Hunt–Szymanski LCS diff algorithm.
|
||||||
///
|
///
|
||||||
|
|
@ -52,10 +53,10 @@ where
|
||||||
D: DiffHook,
|
D: DiffHook,
|
||||||
New::Output: PartialEq<Old::Output>,
|
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)?;
|
d.delete(old_range.start, old_range.len(), new_range.start)?;
|
||||||
return Ok(());
|
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())?;
|
d.insert(old_range.start, new_range.start, new_range.len())?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ use std::ops::{Index, IndexMut, Range};
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
use crate::algorithms::DiffHook;
|
use crate::algorithms::DiffHook;
|
||||||
|
use crate::utils::is_empty_range;
|
||||||
|
|
||||||
/// Myers' diff algorithm.
|
/// Myers' diff algorithm.
|
||||||
///
|
///
|
||||||
|
|
@ -171,7 +172,7 @@ where
|
||||||
New: Index<usize> + ?Sized,
|
New: Index<usize> + ?Sized,
|
||||||
New::Output: PartialEq<Old::Output>,
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
new_range
|
new_range
|
||||||
|
|
@ -352,15 +353,15 @@ where
|
||||||
old_range.end -= common_suffix_len;
|
old_range.end -= common_suffix_len;
|
||||||
new_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
|
// Do nothing
|
||||||
} else if new_range.start >= new_range.end {
|
} else if is_empty_range(&new_range) {
|
||||||
d.delete(
|
d.delete(
|
||||||
old_range.start,
|
old_range.start,
|
||||||
old_range.end - old_range.start,
|
old_range.end - old_range.start,
|
||||||
new_range.start,
|
new_range.start,
|
||||||
)?;
|
)?;
|
||||||
} else if old_range.start >= old_range.end {
|
} else if is_empty_range(&old_range) {
|
||||||
d.insert(
|
d.insert(
|
||||||
old_range.start,
|
old_range.start,
|
||||||
new_range.start,
|
new_range.start,
|
||||||
|
|
|
||||||
|
|
@ -401,6 +401,12 @@ pub fn diff_lines<'x, T: DiffableStrRef + ?Sized>(
|
||||||
.collect()
|
.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]
|
#[test]
|
||||||
fn test_remapper() {
|
fn test_remapper() {
|
||||||
let a = "foo bar baz";
|
let a = "foo bar baz";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue