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); } }
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); }