protected ObjRefStore RemoveEntryForKey(Type entityType, sbyte idIndex, Object id) { int hash = Hash(ExtractHash(entityType, id, idIndex)); ObjRefStore[] table = this.table; int i = hash & (table.Length - 1); ObjRefStore entry = table[i]; if (entry != null) { if (EqualKeys(entityType, id, idIndex, entry)) { table[i] = entry.NextEntry; EntryRemoved(entry); return(entry); } ObjRefStore prevEntry = entry; entry = entry.NextEntry; while (entry != null) { if (EqualKeys(entityType, id, idIndex, entry)) { prevEntry.NextEntry = entry.NextEntry; EntryRemoved(entry); return(entry); } prevEntry = entry; entry = entry.NextEntry; } } return(null); }
public void ToString(StringBuilder sb) { sb.Append(Count).Append(" items: ["); bool first = true; ObjRefStore[] table = this.table; for (int a = table.Length; a-- > 0;) { ObjRefStore entry = table[a]; while (entry != null) { if (first) { first = false; } else { sb.Append(','); } StringBuilderUtil.AppendPrintable(sb, entry); entry = entry.NextEntry; } } sb.Append(']'); }
public override ObjRefStore CreateObjRefStore(Type entityType, sbyte idIndex, Object id) { IObjRefStoreFactory objRefConstructorDelegate = constructorDelegateMap.Get(entityType, idIndex); if (objRefConstructorDelegate == null) { objRefConstructorDelegate = BuildDelegate(entityType, idIndex); } ObjRefStore objRefStore = objRefConstructorDelegate.CreateObjRef(); objRefStore.Id = id; return(objRefStore); }
protected ObjRefStore AddEntry(Type entityType, Object id, sbyte idIndex, int bucketIndex) { ObjRefStore[] table = this.table; ObjRefStore e = table[bucketIndex]; e = CreateEntry(entityType, id, idIndex, e); table[bucketIndex] = e; EntryAdded(e); if (Count >= threshold) { Resize(2 * table.Length); } return(e); }
public Object[] ToArray() { int index = 0; Object[] targetArray = new Object[Count]; ObjRefStore[] table = this.table; for (int a = table.Length; a-- > 0;) { ObjRefStore entry = table[a]; while (entry != null) { targetArray[index++] = entry; entry = entry.NextEntry; } } return(targetArray); }
public ObjRefStore Get(Type entityType, sbyte idIndex, Object id) { int hash = Hash(ExtractHash(entityType, id, idIndex)); ObjRefStore[] table = this.table; int i = hash & (table.Length - 1); ObjRefStore entry = table[i]; while (entry != null) { if (EqualKeys(entityType, id, idIndex, entry)) { return(entry); } entry = entry.NextEntry; } return(null); }
protected void Transfer(ObjRefStore[] newTable) { int newCapacityMinus1 = newTable.Length - 1; ObjRefStore[] table = this.table; for (int a = table.Length; a-- > 0;) { ObjRefStore entry = table[a], next; while (entry != null) { next = entry.NextEntry; int hash = Hash(ExtractHash(entry.RealType, entry.Id, entry.IdNameIndex)); int i = hash & newCapacityMinus1; entry.NextEntry = newTable[i]; newTable[i] = entry; entry = next; } } }
public void Clear() { if (IsEmpty) { return; } ObjRefStore[] table = this.table; for (int a = table.Length; a-- > 0;) { ObjRefStore entry = table[a]; if (entry != null) { table[a] = null; while (entry != null) { ObjRefStore nextEntry = entry.NextEntry; EntryRemoved(entry); entry = nextEntry; } } } }
protected void EntryRemoved(ObjRefStore e) { size--; }
protected void EntryAdded(ObjRefStore e) { size++; }
protected ObjRefStore CreateEntry(Type entityType, Object id, sbyte idIndex, ObjRefStore nextEntry) { return(objRefStoreEntryProvider.CreateObjRefStore(entityType, idIndex, id, nextEntry)); }
public ObjRefStore Remove(ObjRefStore objRefStore) { return(RemoveEntryForKey(objRefStore.RealType, objRefStore.IdNameIndex, objRefStore.Id)); }
protected bool EqualKeys(Type entityType, Object id, sbyte idIndex, ObjRefStore entry) { return(entry.IsEqualTo(entityType, idIndex, id)); }
public abstract ObjRefStore CreateObjRefStore(Type entityType, sbyte idIndex, Object id, ObjRefStore nextEntry);