1 // Copyright (c) 2011 The LevelDB Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. See the AUTHORS file for names of contributors. 4 5 #include "leveldb/iterator.h" 6 7 namespace leveldb { 8 Iterator()9Iterator::Iterator() { 10 cleanup_.function = NULL; 11 cleanup_.next = NULL; 12 } 13 ~Iterator()14Iterator::~Iterator() { 15 if (cleanup_.function != NULL) { 16 (*cleanup_.function)(cleanup_.arg1, cleanup_.arg2); 17 for (Cleanup* c = cleanup_.next; c != NULL; ) { 18 (*c->function)(c->arg1, c->arg2); 19 Cleanup* next = c->next; 20 delete c; 21 c = next; 22 } 23 } 24 } 25 RegisterCleanup(CleanupFunction func,void * arg1,void * arg2)26void Iterator::RegisterCleanup(CleanupFunction func, void* arg1, void* arg2) { 27 assert(func != NULL); 28 Cleanup* c; 29 if (cleanup_.function == NULL) { 30 c = &cleanup_; 31 } else { 32 c = new Cleanup; 33 c->next = cleanup_.next; 34 cleanup_.next = c; 35 } 36 c->function = func; 37 c->arg1 = arg1; 38 c->arg2 = arg2; 39 } 40 41 namespace { 42 class EmptyIterator : public Iterator { 43 public: EmptyIterator(const Status & s)44 EmptyIterator(const Status& s) : status_(s) { } Valid() const45 virtual bool Valid() const { return false; } Seek(const Slice & target)46 virtual void Seek(const Slice& target) { } SeekToFirst()47 virtual void SeekToFirst() { } SeekToLast()48 virtual void SeekToLast() { } Next()49 virtual void Next() { assert(false); } Prev()50 virtual void Prev() { assert(false); } key() const51 Slice key() const { assert(false); return Slice(); } value() const52 Slice value() const { assert(false); return Slice(); } status() const53 virtual Status status() const { return status_; } 54 private: 55 Status status_; 56 }; 57 } // namespace 58 NewEmptyIterator()59Iterator* NewEmptyIterator() { 60 return new EmptyIterator(Status::OK()); 61 } 62 NewErrorIterator(const Status & status)63Iterator* NewErrorIterator(const Status& status) { 64 return new EmptyIterator(status); 65 } 66 67 } // namespace leveldb 68