using System; using System.Collections.Generic; using System.Text; namespace Org.BouncyCastle.Utilities.Collections { public abstract class CollectionUtilities { public static void CollectMatches(ICollection matches, ISelector selector, IEnumerable> stores) { if (matches == null) throw new ArgumentNullException(nameof(matches)); if (stores == null) return; foreach (var store in stores) { if (store == null) continue; foreach (T match in store.EnumerateMatches(selector)) { matches.Add(match); } } } public static IStore CreateStore(IEnumerable contents) { return new StoreImpl(contents); } public static T GetValueOrKey(IDictionary d, T k) { return d.TryGetValue(k, out var v) ? v : k; } public static V GetValueOrNull(IDictionary d, K k) where V : class { return d.TryGetValue(k, out var v) ? v : null; } public static IEnumerable Proxy(IEnumerable e) { return new EnumerableProxy(e); } public static ICollection ReadOnly(ICollection c) { return new ReadOnlyCollectionProxy(c); } public static IDictionary ReadOnly(IDictionary d) { return new ReadOnlyDictionaryProxy(d); } public static IList ReadOnly(IList l) { return new ReadOnlyListProxy(l); } public static ISet ReadOnly(ISet s) { return new ReadOnlySetProxy(s); } public static bool Remove(IDictionary d, K k, out V v) { if (!d.TryGetValue(k, out v)) return false; d.Remove(k); return true; } public static T RequireNext(IEnumerator e) { if (!e.MoveNext()) throw new InvalidOperationException(); return e.Current; } public static string ToString(IEnumerable c) { IEnumerator e = c.GetEnumerator(); if (!e.MoveNext()) return "[]"; StringBuilder sb = new StringBuilder("["); sb.Append(e.Current); while (e.MoveNext()) { sb.Append(", "); sb.Append(e.Current); } sb.Append(']'); return sb.ToString(); } } }