void Hash::resolveBucketOverflow(Bucket* overflowedBucket, int bucketNumber, int referenceNumber) { //se crea un nuevo bucket Bucket* newBucket = new Bucket(this->bucketSize); int newBucketNumber = this->findNewBlock(); //Actualiza el factor de dispersion int originalDispersionNumber = overflowedBucket->getDispersionNumber(); overflowedBucket->setDispersionNumber(2 * originalDispersionNumber); newBucket->setDispersionNumber(2 * originalDispersionNumber); bool duplicate = (originalDispersionNumber == this->hashTable->getSize()); if(duplicate) this->hashTable->duplicateTable(referenceNumber, newBucketNumber); else this->hashTable->updateReferences(referenceNumber, overflowedBucket->getDispersionNumber(), newBucketNumber); this->reHashRecords(overflowedBucket, bucketNumber, newBucket); this->blockPersistor->saveBlock(bucketNumber, overflowedBucket->Serialize()); this->blockPersistor->saveBlock(newBucketNumber, newBucket->Serialize()); delete newBucket; }