Add imara histogram diff algorithm
Dependencies
- [2]
GA3P7FOMNicer conflict markers - [3]
OY3CGEHQEarly stop in the diff algorithms for diff --short - [4]
SXEYMYF7Fixing the bad changes in history (unfortunately, by rebooting).
Change contents
- edit in libpijul/src/diff/diff.rs at line 7
ImaraHistogram, - replacement in libpijul/src/diff/diff.rs at line 22
let mut dd = diffs::Replace::new(D {let result = D { - replacement in libpijul/src/diff/diff.rs at line 25[3.705]→[3.705:713](∅→∅),[3.713]→[3.801952:802185](∅→∅),[3.801952]→[3.801952:802185](∅→∅),[3.802185]→[3.714:738](∅→∅),[3.738]→[3.802204:802409](∅→∅),[3.802204]→[3.802204:802409](∅→∅),[3.802409]→[2.5625:5649](∅→∅),[3.767]→[3.802428:802454](∅→∅),[2.5649]→[3.802428:802454](∅→∅),[3.802428]→[3.802428:802454](∅→∅)
});match algorithm {Algorithm::Patience => diffs::patience::diff(&mut dd,lines_a,0,lines_a.len(),lines_b,0,lines_b.len(),).unwrap_or(()),Algorithm::Myers => diffs::myers::diff(&mut dd,lines_a,0,lines_a.len(),lines_b,0,lines_b.len(),).unwrap_or(()),}dd.into_inner()};return match algorithm {Algorithm::Patience => {let mut dd = diffs::Replace::new(result);diffs::patience::diff(&mut dd,lines_a,0,lines_a.len(),lines_b,0,lines_b.len(),).unwrap_or(());dd.into_inner()}Algorithm::Myers => {let mut dd = diffs::Replace::new(result);diffs::myers::diff(&mut dd,lines_a,0,lines_a.len(),lines_b,0,lines_b.len(),).unwrap_or(());dd.into_inner()}Algorithm::ImaraHistogram => {let source = imara_diff::intern::InternedInput::new(&Lines(lines_a), &Lines(lines_b));imara_diff::diff(imara_diff::Algorithm::Histogram, &source, result)}}; - edit in libpijul/src/diff/diff.rs at line 152
/// struct used for imara interning see InternedInputstruct Lines<'a>(&'a [Line<'a>]);impl<'a> imara_diff::intern::TokenSource for &Lines<'a> {type Token = &'a Line<'a>;type Tokenizer = core::slice::Iter<'a, Line<'a>>;fn tokenize(&self) -> Self::Tokenizer {self.0.iter()}fn estimate_tokens(&self) -> u32 {self.0.len() as u32}}impl imara_diff::Sink for D {type Out = D;fn process_change(&mut self, before: std::ops::Range<u32>, after: std::ops::Range<u32>) {debug!("Process change: old:{:?}-{:?} new:{:?}-{:?}",before.start, before.end, after.start, after.end);self.r.push(Replacement {old: before.start as usize,old_len: before.len(),new: after.start as usize,new_len: after.len(),is_cyclic: false,});}fn finish(self) -> Self::Out {self}}