public static IComparer <Comic> Make(ComicSortSelector sortSelector) { return(sortSelector switch { ComicSortSelector.Title => new TitleComparer(), ComicSortSelector.Author => new AuthorComparer(), ComicSortSelector.DateAdded => new DateAddedComparer(), ComicSortSelector.Random => throw new ProgrammerError($"{nameof(ComicComparers)}.{nameof(Make)}: Random is not allowed here"), _ => throw new ProgrammerError($"{nameof(ComicComparers)}.{nameof(Make)}: unexpected sort selector") });
private static void SortComics(List <Comic> comics, ComicSortSelector sortSelector) { if (sortSelector == ComicSortSelector.Random) { General.Shuffle(comics); } else { comics.Sort(ComicComparers.Make(sortSelector)); } }
internal SortedComicView( ComicView trackChangesFrom, IEnumerable <Comic> comics, ComicSortSelector sortSelector ) : this(trackChangesFrom, comicAccessor : new Dictionary <string, Comic>(), sortedComics : new List <Comic>(), sortSelector) { foreach (var comic in comics) { this.Instance_AddComic(comic); } }
/// <summary> /// A convenience constructor, for a pre-populated comicAccessor field /// </summary> private SortedComicView( ComicView trackChangesFrom, Dictionary <string, Comic> comicAccessor, List <Comic> sortedComics, ComicSortSelector sortSelector ) : base(trackChangesFrom) { this.comicAccessor = comicAccessor; this.sortedComics = sortedComics; this.sortSelector = sortSelector; }
// this override optimizes Sorted since we know more than an unsorted collection public override SortedComicView Sorted(ComicSortSelector sortSelector) { if (sortSelector == this.sortSelector) { return(this); } var sorted = new List <Comic>(this.sortedComics); SortComics(sorted, sortSelector); return(new SortedComicView(this, this.comicAccessor, sorted, sortSelector)); }
public void Sort(ComicSortSelector sortSelector) { this.sortSelector = sortSelector; SortComics(this.sortedComics, sortSelector); this.OnComicChanged(new ViewChangedEventArgs(ComicChangeType.Refresh)); }