Exemplo n.º 1
0
        private void AddCluster()
        {
            TCluster NewCluster = new TCluster(this.size);

            size = (int)(size * this.factor);

            NewCluster.next   = this.FirstCluster;              //New cluster is added in the beginning
            this.FirstCluster = NewCluster;

            TPosition pos = new TPosition(ref FirstCluster.next, 0);

            while (!(pos.cluster == FirstCluster && pos.offset == 0))      //rehash
            {
                if (Used(pos.cluster.Cluster[pos.offset]))
                {
                    TEntry    entry       = pos.cluster.Cluster[pos.offset];
                    TPosition newPosition = GenerateKey(entry.u);

                    if (newPosition.offset != pos.offset || newPosition.cluster != pos.cluster)
                    {
                        pos.cluster.Cluster[pos.offset] = TEntry.DirtyEntry();
                        this.count--;
                        Add(entry);
                    }
                }

                IncreaseKey(ref pos);
            }
        }
Exemplo n.º 2
0
        public void Remove(int u)
        {
            TPosition pos = GenerateKey(u);

            while (!Null(pos.cluster.Cluster[pos.offset]))
            {
                if (pos.cluster.Cluster[pos.offset].u == u)
                {
                    count--;
                    pos.cluster.Cluster[pos.offset] = TEntry.DirtyEntry();     //Only flags dirty
                    return;
                }
                IncreaseKey(ref pos);
            }
        }