struct TimelineDiffMinimizer<'a, S, I> {
store: &'a S,
item_map: HashMap<String, I>,
updated_item_ids: HashSet<String>,
}Expand description
A helper struct to minimize a list of VectorDiff.
This does not support VectorDiff::Clear, VectorDiff::Truncate and
VectorDiff::Reset as we assume that lists including those cannot be
minimized in an optimal way.
Fields§
§store: &'a S§item_map: HashMap<String, I>§updated_item_ids: HashSet<String>Implementations§
Source§impl<'a, S, I> TimelineDiffMinimizer<'a, S, I>
impl<'a, S, I> TimelineDiffMinimizer<'a, S, I>
Source§impl<S, I> TimelineDiffMinimizer<'_, S, I>
impl<S, I> TimelineDiffMinimizer<'_, S, I>
Sourcefn load_items(&mut self) -> Vec<String>
fn load_items(&mut self) -> Vec<String>
Load the items from the store.
Returns the list of timeline IDs of the items.
Sourcefn update_or_create_item(&mut self, data: &S::Data) -> String
fn update_or_create_item(&mut self, data: &S::Data) -> String
Update or create an item in the store using the given data.
Returns the timeline ID of the item.
Sourcefn apply_diff_to_items(
&mut self,
item_ids: &[String],
diff_list: Vec<VectorDiff<S::Data>>,
) -> Vec<String>
fn apply_diff_to_items( &mut self, item_ids: &[String], diff_list: Vec<VectorDiff<S::Data>>, ) -> Vec<String>
Apply the given diff to the given items.
Sourcefn item_diff_list(
&self,
old_item_ids: &[String],
new_item_ids: &[String],
) -> Vec<TimelineDiff<S::Item>>
fn item_diff_list( &self, old_item_ids: &[String], new_item_ids: &[String], ) -> Vec<TimelineDiff<S::Item>>
Compute the list of item diffs between the two given lists.
Uses a diff algorithm to minimize the removals and additions.
Sourcefn per_item_diff<'a>(
old_item_ids: &'a [String],
new_item_ids: &'a [String],
) -> Vec<ItemDiff<'a>>
fn per_item_diff<'a>( old_item_ids: &'a [String], new_item_ids: &'a [String], ) -> Vec<ItemDiff<'a>>
Get a per-item diff by implementing a simple longest common subsequence (LCS) algorithm to find the minimal diff. Given that the list should not be too long, we do not need an efficient and more complicated algorithm.
Source: https://en.wikipedia.org/wiki/Longest_common_subsequence
Sourcefn apply(self, diff_list: Vec<VectorDiff<S::Data>>)
fn apply(self, diff_list: Vec<VectorDiff<S::Data>>)
Minimize the given diff and apply it to the store.
Auto Trait Implementations§
impl<'a, S, I> Freeze for TimelineDiffMinimizer<'a, S, I>
impl<'a, S, I> RefUnwindSafe for TimelineDiffMinimizer<'a, S, I>where
S: RefUnwindSafe,
I: RefUnwindSafe,
impl<'a, S, I> Send for TimelineDiffMinimizer<'a, S, I>
impl<'a, S, I> Sync for TimelineDiffMinimizer<'a, S, I>
impl<'a, S, I> Unpin for TimelineDiffMinimizer<'a, S, I>where
I: Unpin,
impl<'a, S, I> UnsafeUnpin for TimelineDiffMinimizer<'a, S, I>
impl<'a, S, I> UnwindSafe for TimelineDiffMinimizer<'a, S, I>where
S: RefUnwindSafe,
I: UnwindSafe,
Blanket Implementations§
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, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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