~ubuntu-branches/ubuntu/quantal/ceph/quantal

« back to all changes in this revision

Viewing changes to src/leveldb/table/iterator.cc

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2012-07-16 09:56:24 UTC
  • mfrom: (0.3.11)
  • mto: This revision was merged to the branch mainline in revision 17.
  • Revision ID: package-import@ubuntu.com-20120716095624-azr2w4hbhei1rxmx
Tags: upstream-0.48
ImportĀ upstreamĀ versionĀ 0.48

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
 
9
 
Iterator::Iterator() {
10
 
  cleanup_.function = NULL;
11
 
  cleanup_.next = NULL;
12
 
}
13
 
 
14
 
Iterator::~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
 
 
26
 
void 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:
44
 
  EmptyIterator(const Status& s) : status_(s) { }
45
 
  virtual bool Valid() const { return false; }
46
 
  virtual void Seek(const Slice& target) { }
47
 
  virtual void SeekToFirst() { }
48
 
  virtual void SeekToLast() { }
49
 
  virtual void Next() { assert(false); }
50
 
  virtual void Prev() { assert(false); }
51
 
  Slice key() const { assert(false); return Slice(); }
52
 
  Slice value() const { assert(false); return Slice(); }
53
 
  virtual Status status() const { return status_; }
54
 
 private:
55
 
  Status status_;
56
 
};
57
 
}  // namespace
58
 
 
59
 
Iterator* NewEmptyIterator() {
60
 
  return new EmptyIterator(Status::OK());
61
 
}
62
 
 
63
 
Iterator* NewErrorIterator(const Status& status) {
64
 
  return new EmptyIterator(status);
65
 
}
66
 
 
67
 
}  // namespace leveldb