public void Sort() { if (ThreadCount == 0) { throw new InvalidOperationException("Threads property not set and default value 0 is not valid."); } if (ThreadCount == 1) { Result = Copies.GetRange(_startI, _count); Result.Sort(_comparer); } else { var leftSon = new ParallelSorter(_startI, _count / 2); leftSon.ThreadCount = ThreadCount / 2; leftSon.Copies = Copies; var leftThread = new Thread(leftSon.Sort); var rightSon = new ParallelSorter(_startI + _count / 2, _count - _count / 2); rightSon.ThreadCount = (ThreadCount + 1) / 2; rightSon.Copies = Copies; var rightThread = new Thread(rightSon.Sort); leftThread.Start(); rightThread.Start(); leftThread.Join(); rightThread.Join(); Result = new List <Copy>(); Merge(leftSon.Result, rightSon.Result); } }
public List <Copy> ExecuteQuery() { if (ThreadCount == 0) { throw new InvalidOperationException("Threads property not set and default value 0 is not valid."); } bool Filter(Copy copy) { var shelf = copy.Book.Shelf; return(copy.State == CopyState.OnLoan && shelf[shelf.Length - 1] >= 'A' && shelf[shelf.Length - 1] <= 'Q'); } var filteredCopies = FilterCopies(Library.Copies, Filter); var sorter = new ParallelSorter(0, filteredCopies.Count) { Copies = filteredCopies, ThreadCount = ThreadCount }; sorter.Sort(); return(sorter.Result); }