|
@ -54,13 +54,6 @@ namespace storm { |
|
|
buckets = storm::storage::BitVector(bucketSize * (1ull << currentSize)); |
|
|
buckets = storm::storage::BitVector(bucketSize * (1ull << currentSize)); |
|
|
occupied = storm::storage::BitVector(1ull << currentSize); |
|
|
occupied = storm::storage::BitVector(1ull << currentSize); |
|
|
values = std::vector<ValueType>(1ull << currentSize); |
|
|
values = std::vector<ValueType>(1ull << currentSize); |
|
|
|
|
|
|
|
|
#ifndef NDEBUG
|
|
|
|
|
|
numberOfInsertions = 0; |
|
|
|
|
|
numberOfInsertionProbingSteps = 0; |
|
|
|
|
|
numberOfFinds = 0; |
|
|
|
|
|
numberOfFindProbingSteps = 0; |
|
|
|
|
|
#endif
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
template<class ValueType, class Hash> |
|
|
template<class ValueType, class Hash> |
|
@ -81,11 +74,7 @@ namespace storm { |
|
|
template<class ValueType, class Hash> |
|
|
template<class ValueType, class Hash> |
|
|
void BitVectorHashMap<ValueType, Hash>::increaseSize() { |
|
|
void BitVectorHashMap<ValueType, Hash>::increaseSize() { |
|
|
++currentSize; |
|
|
++currentSize; |
|
|
#ifndef NDEBUG
|
|
|
|
|
|
STORM_LOG_TRACE("Increasing size of hash map from " << (1ull << (currentSize - 1)) << " to " << (1ull << currentSize) << ". Stats: " << numberOfFinds << " finds (avg. " << (numberOfFindProbingSteps / static_cast<double>(numberOfFinds)) << " probing steps), " << numberOfInsertions << " insertions (avg. " << (numberOfInsertionProbingSteps / static_cast<double>(numberOfInsertions)) << " probing steps)."); |
|
|
|
|
|
#else
|
|
|
|
|
|
STORM_LOG_TRACE("Increasing size of hash map from " << (1ull << (currentSize - 1)) << " to " << (1ull << currentSize) << "."); |
|
|
STORM_LOG_TRACE("Increasing size of hash map from " << (1ull << (currentSize - 1)) << " to " << (1ull << currentSize) << "."); |
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
// Create new containers and swap them with the old ones.
|
|
|
// Create new containers and swap them with the old ones.
|
|
|
storm::storage::BitVector oldBuckets(bucketSize * (1ull << currentSize)); |
|
|
storm::storage::BitVector oldBuckets(bucketSize * (1ull << currentSize)); |
|
@ -170,15 +159,9 @@ namespace storm { |
|
|
|
|
|
|
|
|
template<class ValueType, class Hash> |
|
|
template<class ValueType, class Hash> |
|
|
std::pair<bool, uint64_t> BitVectorHashMap<ValueType, Hash>::findBucket(storm::storage::BitVector const& key) const { |
|
|
std::pair<bool, uint64_t> BitVectorHashMap<ValueType, Hash>::findBucket(storm::storage::BitVector const& key) const { |
|
|
#ifndef NDEBUG
|
|
|
|
|
|
++numberOfFinds; |
|
|
|
|
|
#endif
|
|
|
|
|
|
uint64_t bucket = hasher(key) >> this->getCurrentShiftWidth(); |
|
|
uint64_t bucket = hasher(key) >> this->getCurrentShiftWidth(); |
|
|
|
|
|
|
|
|
while (isBucketOccupied(bucket)) { |
|
|
while (isBucketOccupied(bucket)) { |
|
|
#ifndef NDEBUG
|
|
|
|
|
|
++numberOfFindProbingSteps; |
|
|
|
|
|
#endif
|
|
|
|
|
|
if (buckets.matches(bucket * bucketSize, key)) { |
|
|
if (buckets.matches(bucket * bucketSize, key)) { |
|
|
return std::make_pair(true, bucket); |
|
|
return std::make_pair(true, bucket); |
|
|
} |
|
|
} |
|
@ -193,15 +176,9 @@ namespace storm { |
|
|
|
|
|
|
|
|
template<class ValueType, class Hash> |
|
|
template<class ValueType, class Hash> |
|
|
std::pair<bool, uint64_t> BitVectorHashMap<ValueType, Hash>::findBucketToInsert(storm::storage::BitVector const& key) { |
|
|
std::pair<bool, uint64_t> BitVectorHashMap<ValueType, Hash>::findBucketToInsert(storm::storage::BitVector const& key) { |
|
|
#ifndef NDEBUG
|
|
|
|
|
|
++numberOfInsertions; |
|
|
|
|
|
#endif
|
|
|
|
|
|
uint64_t bucket = hasher(key) >> this->getCurrentShiftWidth(); |
|
|
uint64_t bucket = hasher(key) >> this->getCurrentShiftWidth(); |
|
|
|
|
|
|
|
|
while (isBucketOccupied(bucket)) { |
|
|
while (isBucketOccupied(bucket)) { |
|
|
#ifndef NDEBUG
|
|
|
|
|
|
++numberOfInsertionProbingSteps; |
|
|
|
|
|
#endif
|
|
|
|
|
|
if (buckets.matches(bucket * bucketSize, key)) { |
|
|
if (buckets.matches(bucket * bucketSize, key)) { |
|
|
return std::make_pair(true, bucket); |
|
|
return std::make_pair(true, bucket); |
|
|
} |
|
|
} |