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

« back to all changes in this revision

Viewing changes to src/leveldb/include/leveldb/comparator.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
 
#ifndef STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_
6
 
#define STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_
7
 
 
8
 
#include <string>
9
 
 
10
 
namespace leveldb {
11
 
 
12
 
class Slice;
13
 
 
14
 
// A Comparator object provides a total order across slices that are
15
 
// used as keys in an sstable or a database.  A Comparator implementation
16
 
// must be thread-safe since leveldb may invoke its methods concurrently
17
 
// from multiple threads.
18
 
class Comparator {
19
 
 public:
20
 
  virtual ~Comparator();
21
 
 
22
 
  // Three-way comparison.  Returns value:
23
 
  //   < 0 iff "a" < "b",
24
 
  //   == 0 iff "a" == "b",
25
 
  //   > 0 iff "a" > "b"
26
 
  virtual int Compare(const Slice& a, const Slice& b) const = 0;
27
 
 
28
 
  // The name of the comparator.  Used to check for comparator
29
 
  // mismatches (i.e., a DB created with one comparator is
30
 
  // accessed using a different comparator.
31
 
  //
32
 
  // The client of this package should switch to a new name whenever
33
 
  // the comparator implementation changes in a way that will cause
34
 
  // the relative ordering of any two keys to change.
35
 
  //
36
 
  // Names starting with "leveldb." are reserved and should not be used
37
 
  // by any clients of this package.
38
 
  virtual const char* Name() const = 0;
39
 
 
40
 
  // Advanced functions: these are used to reduce the space requirements
41
 
  // for internal data structures like index blocks.
42
 
 
43
 
  // If *start < limit, changes *start to a short string in [start,limit).
44
 
  // Simple comparator implementations may return with *start unchanged,
45
 
  // i.e., an implementation of this method that does nothing is correct.
46
 
  virtual void FindShortestSeparator(
47
 
      std::string* start,
48
 
      const Slice& limit) const = 0;
49
 
 
50
 
  // Changes *key to a short string >= *key.
51
 
  // Simple comparator implementations may return with *key unchanged,
52
 
  // i.e., an implementation of this method that does nothing is correct.
53
 
  virtual void FindShortSuccessor(std::string* key) const = 0;
54
 
};
55
 
 
56
 
// Return a builtin comparator that uses lexicographic byte-wise
57
 
// ordering.  The result remains the property of this module and
58
 
// must not be deleted.
59
 
extern const Comparator* BytewiseComparator();
60
 
 
61
 
}  // namespace leveldb
62
 
 
63
 
#endif  // STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_