Add imara histogram diff algorithm
DTGSYDX3BD6S7BSKHV6SXJPH27EM7E6E45V56KHDM3RW7WUKLDVAC });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)}};
}}/// 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}}