github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/database/leveldb.chai2010/include/leveldb/comparator.h (about)

     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_