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