c63519fa47
The leveldb and univalue 3rd party libraries are not installed and not needed by anyone outside of the Hub. So move them there, making it easier for 3rd party usage.
64 lines
2.0 KiB
C++
64 lines
2.0 KiB
C++
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
|
|
#ifndef STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_
|
|
#define STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_
|
|
|
|
namespace leveldb {
|
|
|
|
// A internal wrapper class with an interface similar to Iterator that
|
|
// caches the valid() and key() results for an underlying iterator.
|
|
// This can help avoid virtual function calls and also gives better
|
|
// cache locality.
|
|
class IteratorWrapper {
|
|
public:
|
|
IteratorWrapper(): iter_(NULL), valid_(false) { }
|
|
explicit IteratorWrapper(Iterator* iter): iter_(NULL) {
|
|
Set(iter);
|
|
}
|
|
~IteratorWrapper() { delete iter_; }
|
|
Iterator* iter() const { return iter_; }
|
|
|
|
// Takes ownership of "iter" and will delete it when destroyed, or
|
|
// when Set() is invoked again.
|
|
void Set(Iterator* iter) {
|
|
delete iter_;
|
|
iter_ = iter;
|
|
if (iter_ == NULL) {
|
|
valid_ = false;
|
|
} else {
|
|
Update();
|
|
}
|
|
}
|
|
|
|
|
|
// Iterator interface methods
|
|
bool Valid() const { return valid_; }
|
|
Slice key() const { assert(Valid()); return key_; }
|
|
Slice value() const { assert(Valid()); return iter_->value(); }
|
|
// Methods below require iter() != NULL
|
|
Status status() const { assert(iter_); return iter_->status(); }
|
|
void Next() { assert(iter_); iter_->Next(); Update(); }
|
|
void Prev() { assert(iter_); iter_->Prev(); Update(); }
|
|
void Seek(const Slice& k) { assert(iter_); iter_->Seek(k); Update(); }
|
|
void SeekToFirst() { assert(iter_); iter_->SeekToFirst(); Update(); }
|
|
void SeekToLast() { assert(iter_); iter_->SeekToLast(); Update(); }
|
|
|
|
private:
|
|
void Update() {
|
|
valid_ = iter_->Valid();
|
|
if (valid_) {
|
|
key_ = iter_->key();
|
|
}
|
|
}
|
|
|
|
Iterator* iter_;
|
|
bool valid_;
|
|
Slice key_;
|
|
};
|
|
|
|
} // namespace leveldb
|
|
|
|
#endif // STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_
|