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