pub(crate) enum DiffCommand<'a> {
Delete {
low: usize,
high: usize,
},
DeleteToEnd {
low: usize,
},
Replace {
low: usize,
high: usize,
lines: Vec<&'a str>,
},
Insert {
pos: usize,
lines: Vec<&'a str>,
},
}
Expand description
A command that can appear in a diff. Each command tells us to remove zero or more lines, and insert zero or more lines in their place.
Commands refer to lines by 1-indexed line number.
Variants§
Delete
Remove the lines from low through high, inclusive.
DeleteToEnd
Remove the lines from low through the end of the file, inclusive.
Replace
Replace the lines from low through high, inclusive, with the lines in ‘lines’.
Fields
Insert
Insert the provided ‘lines’ after the line with index ‘pos’.
Implementations§
Source§impl<'a> DiffCommand<'a>
impl<'a> DiffCommand<'a>
Sourcepub(crate) fn apply_to(&self, target: &mut DiffResult<'a>) -> Result<(), Error>
Available on crate feature slow-diff-apply
only.
pub(crate) fn apply_to(&self, target: &mut DiffResult<'a>) -> Result<(), Error>
slow-diff-apply
only.Transform ‘target’ according to the this command.
Because DiffResult internally uses a vector of line, this implementation is potentially O(n) in the size of the input.
Sourcepub(crate) fn apply_transformation(
&self,
input: &mut DiffResult<'a>,
output: &mut DiffResult<'a>,
) -> Result<(), Error>
pub(crate) fn apply_transformation( &self, input: &mut DiffResult<'a>, output: &mut DiffResult<'a>, ) -> Result<(), Error>
Apply this command to ‘input’, moving lines into ‘output’.
This is a more efficient algorithm, but it requires that the diff commands are sorted in reverse order by line number. (Fortunately, the Tor ed diff format guarantees this.)
Before calling this method, input and output must contain the results of having applied the previous command in the diff. (When no commands have been applied, input starts out as the original text, and output starts out empty.)
This method applies the command by copying unaffected lines from the end of input into output, adding any lines inserted by this command, and finally deleting any affected lines from input.
We build the output
value in reverse order, and then put it
back to normal before giving it to the user.
Sourcepub(crate) fn lines(&self) -> Option<&[&'a str]>
pub(crate) fn lines(&self) -> Option<&[&'a str]>
Return the lines that we should add to the output
Sourcepub(crate) fn linebuf_mut(&mut self) -> Option<&mut Vec<&'a str>>
pub(crate) fn linebuf_mut(&mut self) -> Option<&mut Vec<&'a str>>
Return a mutable reference to the vector of lines we should add to the output.
Sourcepub(crate) fn following_lines(&self) -> Option<usize>
pub(crate) fn following_lines(&self) -> Option<usize>
Return the (1-indexed) line number of the first line in the input that comes after this command, and is not affected by it.
We use this line number to know which lines we should copy.
Sourcepub(crate) fn first_removed_line(&self) -> usize
pub(crate) fn first_removed_line(&self) -> usize
Return the (1-indexed) line number of the first line that we should clear from the input when processing this command.
This can be the same as following_lines(), if we shouldn’t actually remove any lines.
Trait Implementations§
Source§impl<'a> Clone for DiffCommand<'a>
impl<'a> Clone for DiffCommand<'a>
Source§fn clone(&self) -> DiffCommand<'a>
fn clone(&self) -> DiffCommand<'a>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl<'a> Freeze for DiffCommand<'a>
impl<'a> RefUnwindSafe for DiffCommand<'a>
impl<'a> Send for DiffCommand<'a>
impl<'a> Sync for DiffCommand<'a>
impl<'a> Unpin for DiffCommand<'a>
impl<'a> UnwindSafe for DiffCommand<'a>
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more