| // Copyright (c) 2012, Suryandaru Triandana <syndtr@gmail.com> |
| // All rights reserved. |
| // |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Package comparer provides interface and implementation for ordering |
| // sets of data. |
| package comparer |
| |
| // BasicComparer is the interface that wraps the basic Compare method. |
| type BasicComparer interface { |
| // Compare returns -1, 0, or +1 depending on whether a is 'less than', |
| // 'equal to' or 'greater than' b. The two arguments can only be 'equal' |
| // if their contents are exactly equal. Furthermore, the empty slice |
| // must be 'less than' any non-empty slice. |
| Compare(a, b []byte) int |
| } |
| |
| // Comparer defines a total ordering over the space of []byte keys: a 'less |
| // than' relationship. |
| type Comparer interface { |
| BasicComparer |
| |
| // Name returns name of the comparer. |
| // |
| // The Level-DB on-disk format stores the comparer name, and opening a |
| // database with a different comparer from the one it was created with |
| // will result in an error. |
| // |
| // An implementation to a new name whenever the comparer 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 users of this package. |
| Name() string |
| |
| // Bellow are advanced functions used used to reduce the space requirements |
| // for internal data structures such as index blocks. |
| |
| // Separator appends a sequence of bytes x to dst such that a <= x && x < b, |
| // where 'less than' is consistent with Compare. An implementation should |
| // return nil if x equal to a. |
| // |
| // Either contents of a or b should not by any means modified. Doing so |
| // may cause corruption on the internal state. |
| Separator(dst, a, b []byte) []byte |
| |
| // Successor appends a sequence of bytes x to dst such that x >= b, where |
| // 'less than' is consistent with Compare. An implementation should return |
| // nil if x equal to b. |
| // |
| // Contents of b should not by any means modified. Doing so may cause |
| // corruption on the internal state. |
| Successor(dst, b []byte) []byte |
| } |