Home | History | Annotate | Download | only in leveldb
      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_
     64