41 lines
1.1 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
}
|