text: // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file. See the AUTHORS file for names of contributors.
  
  #ifndef STORAGE_LEVELDB_INCLUDE_COMPAQXTOR_H_
  #define STORAGE_LEVELDB_INCLUDE_COMPAQXTOR_H_
  
  #include <string>
  
  namespace leveldb {
  
  class Slice;
  
  // A Comparator object provides a total order across slices that are
  // used as keys in an sstable or a database.  A Comparator implementation
  // must be thread-safe since leveldb may invoke its methods concurrently
  // from multiple threads.
  class Comparator {
   public:
    virtual ~Comparator();
  
    // Three-way comparison.  Returns value:
    //   < 0 iff "a" < "b",
    //   == 0 iff "a" == "b",
    //   > 0 iff "a" > "b"
    virtual int Compare(const Slice& a, const Slice& b) const = 0;
  
    // The name of the comparator.  Used to check for comparator
    // mismatches (i.e., a DB created with one comparator is
    // accessed using a different comparator.
    //
    // The client of this package should switch to a new name whenever
    // the comparator implementation changes in a way that will cause
    // the relative ordering of any two keys to change.
    //
    // Names starting with "leveldb." are reserved and should not be used
    // by any clients of this package.
    virtual const char* Name() const = 0;
  
    // Advanced functions: these are used to reduce the space requirements
    // for internal data structures like index blocks.
  
    // If *start < limit, changes *start to a short string in [start,limit).
    // Simple comparator implementations may return with *start unchanged,
    // i.e., an implementation of this method that does nothing is correct.
    virtual void FindShortestSeparator(
        std::string* start,
        const Slice& limit) const = 0;
  
    // Changes *key to a short string >= *key.
    // Simple comparator implementations may return with *key unchanged,
    // i.e., an implementation of this method that does nothing is correct.
    virtual void FindShortSuccessor(std::string* key) const = 0;
  };
  
  // Return a builtin comparator that uses lexicographic byte-wise
  // ordering.  The result remains the property of this module and
  // must not be deleted.
  extern const Comparator* BytewiseComparator();
  
  }  // namespace leveldb
  
  #endif  // STORAGE_LEVELDB_INCLUDE_COMPAQXTOR_H_
  