private IChangeSet <T> Reset(ChangeAwareList <T> original, ChangeAwareList <T> target) { var sorted = original.OrderBy(t => t, _comparer).ToList(); target.Clear(); target.AddRange(sorted); return(target.CaptureChanges()); }
private IChangeSet <T> ChangeComparer(ChangeAwareList <T> target, IComparer <T> comparer) { _comparer = comparer; var sorted = target.OrderBy(t => t, _comparer).ToList(); target.Clear(); target.AddRange(sorted); return(target.CaptureChanges()); }
private IChangeSet <T> Reorder(ChangeAwareList <T> target) { int index = -1; var sorted = target.OrderBy(t => t, _comparer).ToList(); foreach (var item in sorted) { index++; var existing = target[index]; //if item is in the same place, if (ReferenceEquals(item, existing)) { continue; } //Cannot use binary search as Resort is implicit of a mutable change var old = target.IndexOf(item); target.Move(old, index); } return(target.CaptureChanges()); }