private ScalableHybridListEntry GetAndCheckEntry(int index) { ScalableHybridListEntry scalableHybridListEntry = this.m_entries[index]; this.CheckNonFreeEntry(scalableHybridListEntry, index); return(scalableHybridListEntry); }
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); } }
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); }