You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.4 KiB
64 lines
2.4 KiB
// 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> |
|
|
|
#include "leveldb/export.h" |
|
|
|
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 LEVELDB_EXPORT 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. |
|
LEVELDB_EXPORT const Comparator* BytewiseComparator(); |
|
|
|
} // namespace leveldb |
|
|
|
#endif // STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_
|
|
|