susumu.yata
null+****@clear*****
Thu Apr 4 21:44:07 JST 2013
susumu.yata 2013-04-04 21:44:07 +0900 (Thu, 04 Apr 2013) New Revision: 2ed3beed67586bbb4b49a37e16d8e52776f5feaa https://github.com/groonga/grnxx/commit/2ed3beed67586bbb4b49a37e16d8e52776f5feaa Message: Fix bugs in grnxx::alpha::map::Array. Modified files: lib/grnxx/alpha/map/array.cpp Modified: lib/grnxx/alpha/map/array.cpp (+4 -3) =================================================================== --- lib/grnxx/alpha/map/array.cpp 2013-04-04 18:38:46 +0900 (92c5782) +++ lib/grnxx/alpha/map/array.cpp 2013-04-04 21:44:07 +0900 (f6b37fd) @@ -119,7 +119,7 @@ bool Array<T>::reset(int64_t key_id, T dest_key) { template <typename T> bool Array<T>::search(T key, int64_t *key_id) { - for (int64_t i = 0; i < header_->max_key_id; ++i) { + for (int64_t i = 0; i <= header_->max_key_id; ++i) { if (get_bit(i)) { if (key == keys_[i]) { if (key_id) { @@ -135,7 +135,7 @@ bool Array<T>::search(T key, int64_t *key_id) { template <typename T> bool Array<T>::insert(T key, int64_t *key_id) { int64_t key_id_candidate = -1; - for (int64_t i = 0; i < header_->max_key_id; ++i) { + for (int64_t i = 0; i <= header_->max_key_id; ++i) { if (get_bit(i)) { if (key == keys_[i]) { if (key_id) { @@ -143,7 +143,7 @@ bool Array<T>::insert(T key, int64_t *key_id) { } return false; } - } else if (key_id_candidate != -1) { + } else if (key_id_candidate == -1) { // Use the youngest ID if there exist IDs associated with removed keys. key_id_candidate = i; } @@ -152,6 +152,7 @@ bool Array<T>::insert(T key, int64_t *key_id) { key_id_candidate = ++header_->max_key_id; } keys_[key_id_candidate] = key; + set_bit(key_id_candidate, true); if (key_id) { *key_id = key_id_candidate; } -------------- next part -------------- HTML����������������������������...Download