private IDisposable SetAndPin(int index, T item, bool fromAdd)
        {
            this.CheckIndex(index, this.m_count - 1);
            IDisposable result;

            if (this.m_array != null)
            {
                result = this.m_array.PinValue();
                this.m_array.Value().Array[index] = item;
                if (fromAdd)
                {
                    this.m_array.UpdateSize(ItemSizes.SizeOfInObjectArray(item));
                }
            }
            else
            {
                int bucketIndex = this.GetBucketIndex(index);
                IReference <StorableArray> reference          = this.m_buckets[bucketIndex];
                UnPinCascadeHolder         unPinCascadeHolder = new UnPinCascadeHolder();
                unPinCascadeHolder.AddCleanupRef(reference.PinValue());
                this.m_buckets.PinContainingBucket(bucketIndex, unPinCascadeHolder);
                result = unPinCascadeHolder;
                StorableArray storableArray = reference.Value();
                storableArray.Array[this.GetIndexInBucket(index)] = item;
                if (fromAdd)
                {
                    reference.UpdateSize(ItemSizes.SizeOfInObjectArray(item));
                }
            }
            return(result);
        }
 private void PinContainingBucket(int index, UnPinCascadeHolder cascadeHolder)
 {
     if (this.m_array != null)
     {
         cascadeHolder.AddCleanupRef(this.m_array.PinValue());
     }
     else
     {
         int bucketIndex = this.GetBucketIndex(index);
         cascadeHolder.AddCleanupRef(this.m_buckets[bucketIndex].PinValue());
         this.m_buckets.PinContainingBucket(bucketIndex, cascadeHolder);
     }
 }