| // 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_COMPARATOR_H_ |
| #define STORAGE_LEVELDB_INCLUDE_COMPARATOR_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_COMPARATOR_H_ |