public override object FetchStaticReference(int id) { if (id == -2147483647) { return(null); } StaticReferenceHolder staticReferenceHolder = default(StaticReferenceHolder); object result; if (this.m_staticReferences.TryGetValue(id, out staticReferenceHolder)) { result = staticReferenceHolder.Value; staticReferenceHolder.RefCount--; if (staticReferenceHolder.RefCount <= 0) { this.m_staticReferences.Remove(id); } } else { Global.Tracer.Assert(false, "Missing static reference"); result = null; } return(result); }
private int InternalStoreStaticReference(int id, object item) { if (this.m_staticReferences == null) { this.m_staticReferences = new Dictionary <int, StaticReferenceHolder>(); } int num = id; if (id == -2147483648) { num = (int)this.m_offsetMap.GenerateTempId().Value; } StaticReferenceHolder staticReferenceHolder = default(StaticReferenceHolder); while (this.m_staticReferences.TryGetValue(num, out staticReferenceHolder) && !object.ReferenceEquals(item, staticReferenceHolder.Value)) { num = (int)this.m_offsetMap.GenerateTempId().Value; } if (staticReferenceHolder != null) { staticReferenceHolder.RefCount++; } else { staticReferenceHolder = new StaticReferenceHolder(); staticReferenceHolder.Value = item; staticReferenceHolder.RefCount = 1; this.m_staticReferences[num] = staticReferenceHolder; } return(num); }