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

« back to all changes in this revision

Viewing changes to src/leveldb/include/leveldb/iterator.h

  • 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
 
// An iterator yields a sequence of key/value pairs from a source.
6
 
// The following class defines the interface.  Multiple implementations
7
 
// are provided by this library.  In particular, iterators are provided
8
 
// to access the contents of a Table or a DB.
9
 
//
10
 
// Multiple threads can invoke const methods on an Iterator without
11
 
// external synchronization, but if any of the threads may call a
12
 
// non-const method, all threads accessing the same Iterator must use
13
 
// external synchronization.
14
 
 
15
 
#ifndef STORAGE_LEVELDB_INCLUDE_ITERATOR_H_
16
 
#define STORAGE_LEVELDB_INCLUDE_ITERATOR_H_
17
 
 
18
 
#include "leveldb/slice.h"
19
 
#include "leveldb/status.h"
20
 
 
21
 
namespace leveldb {
22
 
 
23
 
class Iterator {
24
 
 public:
25
 
  Iterator();
26
 
  virtual ~Iterator();
27
 
 
28
 
  // An iterator is either positioned at a key/value pair, or
29
 
  // not valid.  This method returns true iff the iterator is valid.
30
 
  virtual bool Valid() const = 0;
31
 
 
32
 
  // Position at the first key in the source.  The iterator is Valid()
33
 
  // after this call iff the source is not empty.
34
 
  virtual void SeekToFirst() = 0;
35
 
 
36
 
  // Position at the last key in the source.  The iterator is
37
 
  // Valid() after this call iff the source is not empty.
38
 
  virtual void SeekToLast() = 0;
39
 
 
40
 
  // Position at the first key in the source that at or past target
41
 
  // The iterator is Valid() after this call iff the source contains
42
 
  // an entry that comes at or past target.
43
 
  virtual void Seek(const Slice& target) = 0;
44
 
 
45
 
  // Moves to the next entry in the source.  After this call, Valid() is
46
 
  // true iff the iterator was not positioned at the last entry in the source.
47
 
  // REQUIRES: Valid()
48
 
  virtual void Next() = 0;
49
 
 
50
 
  // Moves to the previous entry in the source.  After this call, Valid() is
51
 
  // true iff the iterator was not positioned at the first entry in source.
52
 
  // REQUIRES: Valid()
53
 
  virtual void Prev() = 0;
54
 
 
55
 
  // Return the key for the current entry.  The underlying storage for
56
 
  // the returned slice is valid only until the next modification of
57
 
  // the iterator.
58
 
  // REQUIRES: Valid()
59
 
  virtual Slice key() const = 0;
60
 
 
61
 
  // Return the value for the current entry.  The underlying storage for
62
 
  // the returned slice is valid only until the next modification of
63
 
  // the iterator.
64
 
  // REQUIRES: !AtEnd() && !AtStart()
65
 
  virtual Slice value() const = 0;
66
 
 
67
 
  // If an error has occurred, return it.  Else return an ok status.
68
 
  virtual Status status() const = 0;
69
 
 
70
 
  // Clients are allowed to register function/arg1/arg2 triples that
71
 
  // will be invoked when this iterator is destroyed.
72
 
  //
73
 
  // Note that unlike all of the preceding methods, this method is
74
 
  // not abstract and therefore clients should not override it.
75
 
  typedef void (*CleanupFunction)(void* arg1, void* arg2);
76
 
  void RegisterCleanup(CleanupFunction function, void* arg1, void* arg2);
77
 
 
78
 
 private:
79
 
  struct Cleanup {
80
 
    CleanupFunction function;
81
 
    void* arg1;
82
 
    void* arg2;
83
 
    Cleanup* next;
84
 
  };
85
 
  Cleanup cleanup_;
86
 
 
87
 
  // No copying allowed
88
 
  Iterator(const Iterator&);
89
 
  void operator=(const Iterator&);
90
 
};
91
 
 
92
 
// Return an empty iterator (yields nothing).
93
 
extern Iterator* NewEmptyIterator();
94
 
 
95
 
// Return an empty iterator with the specified status.
96
 
extern Iterator* NewErrorIterator(const Status& status);
97
 
 
98
 
}  // namespace leveldb
99
 
 
100
 
#endif  // STORAGE_LEVELDB_INCLUDE_ITERATOR_H_