public void AddProcessor(IEventReceiverable requester) { var interfaces = requester.GetType().GetInterfaces(); int length = interfaces.Length; for (int i = 0; i < length; i++) { var temp = interfaces[i]; if (temp.IsGenericType && temp.GetGenericTypeDefinition() == typeof(IEventReceiverable <>)) { int type = temp.GetGenericArguments()[0].GetHashCode(); List <WeakWrapper <IEventReceiverable> > outProc = null; if (processors.TryGetValue(type, out outProc)) { WeakWrapper <IEventReceiverable> wrap = new WeakWrapper <IEventReceiverable>(requester); processors[type].Add(wrap); return; } processors.Add(type, new List <WeakWrapper <IEventReceiverable> >() { new WeakWrapper <IEventReceiverable>(requester) }); } } }
public int GetOrCreateId(object o, Func <int> idProvider) { return(objectToIdMap.GetOrAdd(WeakWrapper <object> .CreateForComparison(o), s => { s.ConvertToRealWeakWrapper(); var id = idProvider(); idToObjectMap.TryAdd(id, s); return id; })); }
public bool TryGetId(object o, out int sourceId) { return(objectToIdMap.TryGetValue(WeakWrapper <object> .CreateForComparison(o), out sourceId)); }