2using System.Collections.Generic;
4using System.Reflection;
7using Microsoft.Xna.Framework;
8using Microsoft.Xna.Framework.Input;
9using Microsoft.Xna.Framework.Graphics;
10using System.Runtime.CompilerServices;
15 public class WeakCatalog<TKey, TValue> where TValue : class
17 public Dictionary<TKey, List<WeakReference<TValue>>> Pages =
new();
19 public Dictionary<TKey, List<WeakReference<TValue>>>.KeyCollection Keys => Pages.Keys;
21 public void Add(TKey key, TValue value)
23 if (!Pages.ContainsKey(key)) Pages[key] =
new();
24 Pages[key].Add(
new WeakReference<TValue>(value));
27 public void Clear() => Pages.Clear();
29 public void RemoveEmptyLinks(TKey key)
31 if (!Pages.ContainsKey(key))
37 Pages[key] = Pages[key].Where(wr =>
40 wr.TryGetTarget(out value);
41 return value is not
null;
45 public IEnumerable<TValue> GetPage(TKey key)
47 RemoveEmptyLinks(key);
48 return Pages[key].Select(wr =>
51 wr.TryGetTarget(out value);