private ScalableHybridListEntry GetAndCheckEntry(int index)
        {
            ScalableHybridListEntry scalableHybridListEntry = this.m_entries[index];

            this.CheckNonFreeEntry(scalableHybridListEntry, index);
            return(scalableHybridListEntry);
        }
Beispiel #2
0
        public bool TryCreateObject(ObjectType objectType, out IPersistable persistObj)
        {
            switch (objectType)
            {
            case ObjectType.StorageItem:
                persistObj = new StorageItem();
                break;

            case ObjectType.ScalableDictionaryNode:
                persistObj = new ScalableDictionaryNode();
                break;

            case ObjectType.ScalableDictionaryValues:
                persistObj = new ScalableDictionaryValues();
                break;

            case ObjectType.StorableArray:
                persistObj = new StorableArray();
                break;

            case ObjectType.ScalableHybridListEntry:
                persistObj = new ScalableHybridListEntry();
                break;

            default:
                persistObj = null;
                return(false);
            }
            return(true);
        }
 private void CheckNonFreeEntry(ScalableHybridListEntry entry, int index)
 {
     if (entry.Previous == -1 && index != this.m_first)
     {
         Global.Tracer.Assert(false, "Cannot use index: {0}. It points to a free item", index);
     }
 }
 public T this[int index]
 {
     get
     {
         ScalableHybridListEntry andCheckEntry = this.GetAndCheckEntry(index);
         return((T)andCheckEntry.Item);
     }
 }
Beispiel #5
0
        private static List <Declaration> BuildDeclarations()
        {
            List <Declaration> list = new List <Declaration>(8);

            list.Add(BaseReference.GetDeclaration());
            list.Add(ScalableList <StorageItem> .GetDeclaration());
            list.Add(ScalableDictionary <int, StorageItem> .GetDeclaration());
            list.Add(ScalableDictionaryNode.GetDeclaration());
            list.Add(ScalableDictionaryValues.GetDeclaration());
            list.Add(StorageItem.GetDeclaration());
            list.Add(StorableArray.GetDeclaration());
            list.Add(ScalableHybridListEntry.GetDeclaration());
            return(list);
        }
        public void Remove(int index)
        {
            ScalableHybridListEntry scalableHybridListEntry = default(ScalableHybridListEntry);

            using (this.m_entries.GetAndPin(index, out scalableHybridListEntry))
            {
                this.CheckNonFreeEntry(scalableHybridListEntry, index);
                if (scalableHybridListEntry.Previous == -1)
                {
                    this.m_first = scalableHybridListEntry.Next;
                }
                else
                {
                    ScalableHybridListEntry scalableHybridListEntry2 = default(ScalableHybridListEntry);
                    using (this.m_entries.GetAndPin(scalableHybridListEntry.Previous, out scalableHybridListEntry2))
                    {
                        scalableHybridListEntry2.Next = scalableHybridListEntry.Next;
                    }
                }
                if (scalableHybridListEntry.Next == -1)
                {
                    this.m_last = scalableHybridListEntry.Previous;
                }
                else
                {
                    ScalableHybridListEntry scalableHybridListEntry3 = default(ScalableHybridListEntry);
                    using (this.m_entries.GetAndPin(scalableHybridListEntry.Next, out scalableHybridListEntry3))
                    {
                        scalableHybridListEntry3.Previous = scalableHybridListEntry.Previous;
                    }
                }
                scalableHybridListEntry.Next     = this.m_firstFree;
                this.m_firstFree                 = index;
                scalableHybridListEntry.Item     = null;
                scalableHybridListEntry.Previous = -1;
                this.m_count--;
            }
        }
        public int Add(T item)
        {
            int num = -1;

            if (this.m_firstFree != -1)
            {
                num = this.m_firstFree;
                ScalableHybridListEntry scalableHybridListEntry = default(ScalableHybridListEntry);
                using (this.m_entries.GetAndPin(this.m_firstFree, out scalableHybridListEntry))
                {
                    this.m_firstFree = scalableHybridListEntry.Next;
                    this.SetupLastNode(scalableHybridListEntry, item);
                }
            }
            else
            {
                num = this.m_entries.Count;
                ScalableHybridListEntry scalableHybridListEntry2 = new ScalableHybridListEntry();
                this.SetupLastNode(scalableHybridListEntry2, item);
                this.m_entries.Add(scalableHybridListEntry2);
            }
            if (this.m_count == 0)
            {
                this.m_first = num;
            }
            else
            {
                ScalableHybridListEntry scalableHybridListEntry3 = default(ScalableHybridListEntry);
                using (this.m_entries.GetAndPin(this.m_last, out scalableHybridListEntry3))
                {
                    scalableHybridListEntry3.Next = num;
                }
            }
            this.m_last = num;
            this.m_count++;
            return(num);
        }
 private void SetupLastNode(ScalableHybridListEntry entry, T item)
 {
     entry.Item     = item;
     entry.Next     = -1;
     entry.Previous = this.m_last;
 }
        public int Previous(int index)
        {
            ScalableHybridListEntry andCheckEntry = this.GetAndCheckEntry(index);

            return(andCheckEntry.Previous);
        }
        public int Next(int index)
        {
            ScalableHybridListEntry andCheckEntry = this.GetAndCheckEntry(index);

            return(andCheckEntry.Next);
        }