using ln.collections; using System; using System.Collections.Generic; using System.Text; namespace ln.objects { class ObjectCache { WeakKeyReferenceDictionary guidLookup = new WeakKeyReferenceDictionary(); WeakValueDictionary objectLookup = new WeakValueDictionary(); public ObjectCache() { } public object this[Guid uid] => objectLookup[uid]; public Guid this[object o] => guidLookup[o]; public bool TryGetUID(object o, out Guid uid) => guidLookup.TryGetValue(o, out uid); public bool TryGetObject(Guid uid, out object o) => objectLookup.TryGetValue(uid, out o); public void Add(Guid uid, object o) { guidLookup.Add(o, uid); objectLookup.Add(uid, o); } public void Remove(Guid uid) { guidLookup.Remove(objectLookup[uid]); objectLookup.Remove(uid); } public void Remove(object o) { objectLookup.Remove(guidLookup[o]); guidLookup.Remove(o); } } }