public void Apply() { for (int i = 0; i < deleteList.Count; i++) { Tuple tuple = deleteList[i]; if (table.Contains(tuple.field1, tuple.field2)) { table.Delete(tuple.field1, tuple.field2); } else { deleteList[i] = new Tuple(0xFFFFFFFF, 0xFFFFFFFF); } } var it = insertList.GetEnumerator(); while (it.MoveNext()) { var curr = it.Current; if (!table.Contains(curr.field1, curr.field2)) { table.Insert(curr.field1, curr.field2); table.store1.AddRef(curr.field1); table.store2.AddRef(curr.field2); } } }
public static void Run(int range, bool trace) { BinaryTable table = new BinaryTable(null, null); bool[,] bitMap = new bool[range, range]; CheckTable(table, bitMap, range); // Random random = new Random(0); // Inserting until the table is full for (int i = 0; i < range * range; i++) { uint surr1 = (uint)random.Next(range); uint surr2 = (uint)random.Next(range); while (bitMap[surr1, surr2]) { surr2 = (surr2 + 1) % (uint)range; if (surr2 == 0) { surr1 = (surr1 + 1) % (uint)range; } } if (trace) { Console.WriteLine("Inserting: ({0,2}, {1,2})", surr1, surr2); } table.Insert(surr1, surr2); bitMap[surr1, surr2] = true; CheckTable(table, bitMap, range); } // Deleting until the table is empty for (int i = 0; i < range * range; i++) { uint surr1 = (uint)random.Next(range); uint surr2 = (uint)random.Next(range); while (!bitMap[surr1, surr2]) { surr2 = (surr2 + 1) % (uint)range; if (surr2 == 0) { surr1 = (surr1 + 1) % (uint)range; } } if (trace) { Console.WriteLine("Deleting: ({0}, {1})", surr1, surr2); } table.Delete(surr1, surr2); bitMap[surr1, surr2] = false; CheckTable(table, bitMap, range); } }