Some debugging, found that minimal version of mph_map is broken. Need to investigate.

This commit is contained in:
Davi Reis 2012-03-20 12:06:30 -03:00
parent d4d79c62bd
commit b8610f52e1
3 changed files with 16 additions and 8 deletions

View File

@ -180,20 +180,26 @@ void MPHIndex::Ranking() {
} }
uint32_t MPHIndex::Rank(uint32_t vertex) const { uint32_t MPHIndex::Rank(uint32_t vertex) const {
if (!g_.size()) return 0;
uint32_t index = vertex >> b_; uint32_t index = vertex >> b_;
uint32_t base_rank = ranktable_[index]; uint32_t base_rank = ranktable_[index];
uint32_t beg_idx_v = index << b_; uint32_t beg_idx_v = index << b_;
uint32_t beg_idx_b = beg_idx_v >> 2; uint32_t beg_idx_b = beg_idx_v >> 2;
uint32_t end_idx_b = vertex >> 2; uint32_t end_idx_b = vertex >> 2;
while (beg_idx_b < end_idx_b) base_rank += kBdzLookupIndex[g_.data()[beg_idx_b++]]; while (beg_idx_b < end_idx_b) {
assert(g_.data().size() > beg_idx_b);
base_rank += kBdzLookupIndex[g_.data()[beg_idx_b++]];
}
beg_idx_v = beg_idx_b << 2; beg_idx_v = beg_idx_b << 2;
// cerr << "beg_idx_v: " << beg_idx_v << endl; /*
// cerr << "base rank: " << base_rank << endl; cerr << "beg_idx_v: " << beg_idx_v << endl;
// cerr << "G: "; cerr << "base rank: " << base_rank << endl;
// for (unsigned int i = 0; i < n_; ++i) { cerr << "G: ";
// cerr << static_cast<uint32_t>(g_[i]) << " "; for (unsigned int i = 0; i < n_; ++i) {
// } cerr << static_cast<uint32_t>(g_[i]) << " ";
// cerr << endl; }
cerr << endl;
*/
while (beg_idx_v < vertex) { while (beg_idx_v < vertex) {
if (g_[beg_idx_v] != kUnassigned) ++base_rank; if (g_[beg_idx_v] != kUnassigned) ++base_rank;
++beg_idx_v; ++beg_idx_v;

View File

@ -65,6 +65,7 @@ class MPHIndex {
uint32_t perfect_hash_size() const { return n_; } uint32_t perfect_hash_size() const { return n_; }
template <class SeededHashFcn, class Key> // must agree with Reset template <class SeededHashFcn, class Key> // must agree with Reset
uint32_t perfect_hash(const Key& x) const; uint32_t perfect_hash(const Key& x) const;
uint32_t minimal_perfect_hash_size() const { return size(); }
template <class SeededHashFcn, class Key> // must agree with Reset template <class SeededHashFcn, class Key> // must agree with Reset
uint32_t minimal_perfect_hash(const Key& x) const; uint32_t minimal_perfect_hash(const Key& x) const;

View File

@ -172,6 +172,7 @@ MPH_MAP_METHOD_DECL(void_type, pack)() {
new_present.reserve(new_present.size() * 2); new_present.reserve(new_present.size() * 2);
for (iterator it = begin(), it_end = end(); it != it_end; ++it) { for (iterator it = begin(), it_end = end(); it != it_end; ++it) {
size_type id = index_.perfect_hash(it->first); size_type id = index_.perfect_hash(it->first);
assert(id < index_.perfect_hash_size());
assert(id < new_values.size()); assert(id < new_values.size());
new_values[id] = *it; new_values[id] = *it;
new_present[id] = true; new_present[id] = true;