using System; using System.Collections.Generic; using System.Collections.ObjectModel; namespace Xunit.Runner.Wpf { public static partial class Extensions { public static void AddRange(this ICollection list, IEnumerable items) where TEnumerable : TList { foreach (var i in items) { list.Add(i); } } public static void AddRange(this ObservableCollection list, IEnumerable items) where TEnumerable : TList { foreach (var i in items) { list.Add(i); } } public static int BinarySearch(this ObservableCollection collection, int index, int length, TValue value, IComparer comparer, Func selector) { comparer = comparer ?? Comparer.Default; var low = index; var high = (index + length) - 1; while (low <= high) { var mid = low + ((high - low) / 2); var comp = comparer.Compare(selector(collection[mid]), value); if (comp == 0) { return mid; } if (comp < 0) { low = mid + 1; } else { high = mid - 1; } } return ~low; } public static int BinarySearch(this ObservableCollection collection, TValue value, IComparer comparer, Func selector) { return collection.BinarySearch(0, collection.Count, value, comparer, selector); } public static int BinarySearch(this ObservableCollection collection, int index, int length, TValue value, Func comparison, Func selector) { return collection.BinarySearch(index, length, value, new FuncComparer(comparison), selector); } public static int BinarySearch(this ObservableCollection collection, TValue value, Func comparison, Func selector) { return collection.BinarySearch(0, collection.Count, value, new FuncComparer(comparison), selector); } public static int BinarySearch(this ObservableCollection collection, TValue value, Func selector) { return collection.BinarySearch(0, collection.Count, value, comparer: null, selector: selector); } public static int BinarySearch(this ObservableCollection collection, int index, int length, T value, IComparer comparer) { return collection.BinarySearch(index, length, value, comparer, x => x); } public static int BinarySearch(this ObservableCollection collection, T value, IComparer comparer) { return collection.BinarySearch(0, collection.Count, value, comparer, x => x); } public static int BinarySearch(this ObservableCollection collection, T value) { return collection.BinarySearch(0, collection.Count, value, Comparer.Default, x => x); } public static int BinarySearch(this ObservableCollection collection, int index, int length, T value, Func comparison) { return collection.BinarySearch(index, length, value, new FuncComparer(comparison), x => x); } public static int BinarySearch(this ObservableCollection collection, T value, Func comparison) { return collection.BinarySearch(0, collection.Count, value, new FuncComparer(comparison), x => x); } } }