namespace Iceshrimp.Backend.Core.Extensions; public static class EnumerableExtensions { public static async Task> AwaitAllAsync(this IEnumerable> tasks) { return await Task.WhenAll(tasks); } public static async Task AwaitAllAsync(this IEnumerable tasks) { await Task.WhenAll(tasks); } public static async Task> AwaitAllNoConcurrencyAsync(this IEnumerable> tasks) { var results = new List(); foreach (var task in tasks) results.Add(await task); return results; } public static async Task AwaitAllNoConcurrencyAsync(this IEnumerable tasks) { foreach (var task in tasks) await task; } public static bool IsDisjoint(this IEnumerable x, IEnumerable y) { return x.All(item => !y.Contains(item)); } public static bool Intersects(this IEnumerable x, IEnumerable y) { return x.Any(y.Contains); } public static bool IsEquivalent(this IEnumerable x, IEnumerable y) { var xArray = x as T[] ?? x.ToArray(); var yArray = y as T[] ?? y.ToArray(); return xArray.Length == yArray.Length && xArray.All(yArray.Contains); } public static IEnumerable NotNull(this IEnumerable @enum) => @enum.OfType(); }