Don't do O(N^2) operations in debug mode for vector memtable

Summary: As title. For every operation we're asserting Valid(), which sorts the data. That's pretty terrible. We have to be careful to have decent performance even with DEBUG builds.

Test Plan: make check

Reviewers: sdong, rven, yhchiang, MarkCallaghan

Reviewed By: MarkCallaghan

Subscribers: dhruba, leveldb

Differential Revision: https://reviews.facebook.net/D36969
main
Igor Canadi 10 years ago
parent 08be1803ee
commit d41a565a4a
  1. 3
      util/vectorrep.cc

@ -178,14 +178,12 @@ bool VectorRep::Iterator::Valid() const {
// Returns the key at the current position. // Returns the key at the current position.
// REQUIRES: Valid() // REQUIRES: Valid()
const char* VectorRep::Iterator::key() const { const char* VectorRep::Iterator::key() const {
assert(Valid());
return *cit_; return *cit_;
} }
// Advances to the next position. // Advances to the next position.
// REQUIRES: Valid() // REQUIRES: Valid()
void VectorRep::Iterator::Next() { void VectorRep::Iterator::Next() {
assert(Valid());
if (cit_ == bucket_->end()) { if (cit_ == bucket_->end()) {
return; return;
} }
@ -195,7 +193,6 @@ void VectorRep::Iterator::Next() {
// Advances to the previous position. // Advances to the previous position.
// REQUIRES: Valid() // REQUIRES: Valid()
void VectorRep::Iterator::Prev() { void VectorRep::Iterator::Prev() {
assert(Valid());
if (cit_ == bucket_->begin()) { if (cit_ == bucket_->begin()) {
// If you try to go back from the first element, the iterator should be // If you try to go back from the first element, the iterator should be
// invalidated. So we set it to past-the-end. This means that you can // invalidated. So we set it to past-the-end. This means that you can

Loading…
Cancel
Save