mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-20 11:05:54 +00:00
Merge commit 'b3cd242c6a0c1ef3e7dc63c870604f4ccc92c7a8' as 'Subtrees/hyperleveldb'
This commit is contained in:
67
Subtrees/hyperleveldb/table/iterator.cc
Normal file
67
Subtrees/hyperleveldb/table/iterator.cc
Normal file
@@ -0,0 +1,67 @@
|
||||
// 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.
|
||||
|
||||
#include "hyperleveldb/iterator.h"
|
||||
|
||||
namespace leveldb {
|
||||
|
||||
Iterator::Iterator() {
|
||||
cleanup_.function = NULL;
|
||||
cleanup_.next = NULL;
|
||||
}
|
||||
|
||||
Iterator::~Iterator() {
|
||||
if (cleanup_.function != NULL) {
|
||||
(*cleanup_.function)(cleanup_.arg1, cleanup_.arg2);
|
||||
for (Cleanup* c = cleanup_.next; c != NULL; ) {
|
||||
(*c->function)(c->arg1, c->arg2);
|
||||
Cleanup* next = c->next;
|
||||
delete c;
|
||||
c = next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Iterator::RegisterCleanup(CleanupFunction func, void* arg1, void* arg2) {
|
||||
assert(func != NULL);
|
||||
Cleanup* c;
|
||||
if (cleanup_.function == NULL) {
|
||||
c = &cleanup_;
|
||||
} else {
|
||||
c = new Cleanup;
|
||||
c->next = cleanup_.next;
|
||||
cleanup_.next = c;
|
||||
}
|
||||
c->function = func;
|
||||
c->arg1 = arg1;
|
||||
c->arg2 = arg2;
|
||||
}
|
||||
|
||||
namespace {
|
||||
class EmptyIterator : public Iterator {
|
||||
public:
|
||||
EmptyIterator(const Status& s) : status_(s) { }
|
||||
virtual bool Valid() const { return false; }
|
||||
virtual void Seek(const Slice& target) { }
|
||||
virtual void SeekToFirst() { }
|
||||
virtual void SeekToLast() { }
|
||||
virtual void Next() { assert(false); }
|
||||
virtual void Prev() { assert(false); }
|
||||
Slice key() const { assert(false); return Slice(); }
|
||||
Slice value() const { assert(false); return Slice(); }
|
||||
virtual Status status() const { return status_; }
|
||||
private:
|
||||
Status status_;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
Iterator* NewEmptyIterator() {
|
||||
return new EmptyIterator(Status::OK());
|
||||
}
|
||||
|
||||
Iterator* NewErrorIterator(const Status& status) {
|
||||
return new EmptyIterator(status);
|
||||
}
|
||||
|
||||
} // namespace leveldb
|
||||
Reference in New Issue
Block a user