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