ln.objects/ln.objects/ObjectCache.cs

41 lines
1.1 KiB
C#

using ln.collections;
using System;
using System.Collections.Generic;
using System.Text;
namespace ln.objects
{
class ObjectCache
{
WeakKeyReferenceDictionary<object, Guid> guidLookup = new WeakKeyReferenceDictionary<object, Guid>();
WeakValueDictionary<Guid, object> objectLookup = new WeakValueDictionary<Guid, object>();
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);
}
}
}