size_t bucket_size, int32_t skiplist_height,
int32_t skiplist_branching_factor);
- virtual void Insert(KeyHandle handle) override;
+ void Insert(KeyHandle handle) override;
- virtual bool Contains(const char* key) const override;
+ bool Contains(const char* key) const override;
- virtual size_t ApproximateMemoryUsage() override;
+ size_t ApproximateMemoryUsage() override;
- virtual void Get(const LookupKey& k, void* callback_args,
- bool (*callback_func)(void* arg,
- const char* entry)) override;
+ void Get(const LookupKey& k, void* callback_args,
+ bool (*callback_func)(void* arg, const char* entry)) override;
- virtual ~HashSkipListRep();
+ ~HashSkipListRep() override;
- virtual MemTableRep::Iterator* GetIterator(Arena* arena = nullptr) override;
+ MemTableRep::Iterator* GetIterator(Arena* arena = nullptr) override;
- virtual MemTableRep::Iterator* GetDynamicPrefixIterator(
+ MemTableRep::Iterator* GetDynamicPrefixIterator(
Arena* arena = nullptr) override;
private:
Arena* arena = nullptr)
: list_(list), iter_(list), own_list_(own_list), arena_(arena) {}
- virtual ~Iterator() {
+ ~Iterator() override {
// if we own the list, we should also delete it
if (own_list_) {
assert(list_ != nullptr);
}
// Returns true iff the iterator is positioned at a valid node.
- virtual bool Valid() const override {
- return list_ != nullptr && iter_.Valid();
- }
+ bool Valid() const override { return list_ != nullptr && iter_.Valid(); }
// Returns the key at the current position.
// REQUIRES: Valid()
- virtual const char* key() const override {
+ const char* key() const override {
assert(Valid());
return iter_.key();
}
// Advances to the next position.
// REQUIRES: Valid()
- virtual void Next() override {
+ void Next() override {
assert(Valid());
iter_.Next();
}
// Advances to the previous position.
// REQUIRES: Valid()
- virtual void Prev() override {
+ void Prev() override {
assert(Valid());
iter_.Prev();
}
// Advance to the first entry with a key >= target
- virtual void Seek(const Slice& internal_key,
- const char* memtable_key) override {
+ void Seek(const Slice& internal_key, const char* memtable_key) override {
if (list_ != nullptr) {
const char* encoded_key =
(memtable_key != nullptr) ?
}
// Retreat to the last entry with a key <= target
- virtual void SeekForPrev(const Slice& /*internal_key*/,
- const char* /*memtable_key*/) override {
+ void SeekForPrev(const Slice& /*internal_key*/,
+ const char* /*memtable_key*/) override {
// not supported
assert(false);
}
// Position at the first entry in collection.
// Final state of iterator is Valid() iff collection is not empty.
- virtual void SeekToFirst() override {
+ void SeekToFirst() override {
if (list_ != nullptr) {
iter_.SeekToFirst();
}
// Position at the last entry in collection.
// Final state of iterator is Valid() iff collection is not empty.
- virtual void SeekToLast() override {
+ void SeekToLast() override {
if (list_ != nullptr) {
iter_.SeekToLast();
}
}
+
protected:
void Reset(Bucket* list) {
if (own_list_) {
Bucket* list_;
Bucket::Iterator iter_;
// here we track if we own list_. If we own it, we are also
- // responsible for it's cleaning. This is a poor man's shared_ptr
+ // responsible for it's cleaning. This is a poor man's std::shared_ptr
bool own_list_;
std::unique_ptr<Arena> arena_;
std::string tmp_; // For passing to EncodeKey
memtable_rep_(memtable_rep) {}
// Advance to the first entry with a key >= target
- virtual void Seek(const Slice& k, const char* memtable_key) override {
+ void Seek(const Slice& k, const char* memtable_key) override {
auto transformed = memtable_rep_.transform_->Transform(ExtractUserKey(k));
Reset(memtable_rep_.GetBucket(transformed));
HashSkipListRep::Iterator::Seek(k, memtable_key);
// Position at the first entry in collection.
// Final state of iterator is Valid() iff collection is not empty.
- virtual void SeekToFirst() override {
+ void SeekToFirst() override {
// Prefix iterator does not support total order.
// We simply set the iterator to invalid state
Reset(nullptr);
// Position at the last entry in collection.
// Final state of iterator is Valid() iff collection is not empty.
- virtual void SeekToLast() override {
+ void SeekToLast() override {
// Prefix iterator does not support total order.
// We simply set the iterator to invalid state
Reset(nullptr);
}
+
private:
// the underlying memtable
const HashSkipListRep& memtable_rep_;
// instantiating an empty bucket over which to iterate.
public:
EmptyIterator() { }
- virtual bool Valid() const override { return false; }
- virtual const char* key() const override {
+ bool Valid() const override { return false; }
+ const char* key() const override {
assert(false);
return nullptr;
}
- virtual void Next() override {}
- virtual void Prev() override {}
- virtual void Seek(const Slice& /*internal_key*/,
- const char* /*memtable_key*/) override {}
- virtual void SeekForPrev(const Slice& /*internal_key*/,
- const char* /*memtable_key*/) override {}
- virtual void SeekToFirst() override {}
- virtual void SeekToLast() override {}
+ void Next() override {}
+ void Prev() override {}
+ void Seek(const Slice& /*internal_key*/,
+ const char* /*memtable_key*/) override {}
+ void SeekForPrev(const Slice& /*internal_key*/,
+ const char* /*memtable_key*/) override {}
+ void SeekToFirst() override {}
+ void SeekToLast() override {}
private:
};