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