using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.Linq; using System.Text; using System.Threading.Tasks; namespace xunit.runner.wpf.ViewModel { public sealed partial class TraitCollectionView { private readonly TraitViewModelComparer _comparer = TraitViewModelComparer.Instance; private readonly ObservableCollection _collection = new ObservableCollection(); public ObservableCollection Collection => _collection; public TraitCollectionView() { } public void Add(ImmutableArray traitList) { if (traitList.Length == 0) { return; } foreach (var traitViewModel in traitList) { TryInsert(traitViewModel); } } private void TryInsert(TraitViewModel trait) { // TODO: make it a binary search for (int i = 0; i < _collection.Count; i++) { var current = _collection[i]; var result = _comparer.Compare(trait, current); if (result < 0) { _collection.Insert(i, trait); return; } if (result == 0) { return; } } _collection.Add(trait); } } }