private void SetValue(int index, T value, bool fromAdd) { CheckIndex(index, m_count - 1); if (m_array != null) { using (m_array.PinValue()) { m_array.Value().Array[index] = value; if (fromAdd) { m_array.UpdateSize(ItemSizes.SizeOfInObjectArray(value)); } } } else { IReference <StorableArray> reference = m_buckets[GetBucketIndex(index)]; using (reference.PinValue()) { reference.Value().Array[GetIndexInBucket(index)] = value; if (fromAdd) { reference.UpdateSize(ItemSizes.SizeOfInObjectArray(value)); } } } m_version++; }
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); }