Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }