// Copyright (c) 2022 bradson // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. using System.Collections.Concurrent; using System.Linq; namespace PerformanceFish.Cache; public static class Utility { public static ConcurrentBag All { get; } = new(); public static void Clear() { foreach (var cache in All) { cache.GetType() .GetMethods() .Where(m => m.Name == nameof(Array.Clear) && m.GetParameters().Length == 0) .First() .Invoke(cache, null); } } public static T AddNew() where T : ICollection, new() { var newCollection = new T(); All.Add(newCollection); return newCollection; } public static T AddNew(IEqualityComparer comparer) where T : ICollection, new() { var newCollection = (T)Activator.CreateInstance(typeof(T), comparer); All.Add(newCollection); return newCollection; } } public delegate int IndexGetter(T item);