...
1
2
3
4
5
6
7 package comparer
8
9 import "bytes"
10
11 type bytesComparer struct{}
12
13 func (bytesComparer) Compare(a, b []byte) int {
14 return bytes.Compare(a, b)
15 }
16
17 func (bytesComparer) Name() string {
18 return "leveldb.BytewiseComparator"
19 }
20
21 func (bytesComparer) Separator(dst, a, b []byte) []byte {
22 i, n := 0, len(a)
23 if n > len(b) {
24 n = len(b)
25 }
26 for ; i < n && a[i] == b[i]; i++ {
27 }
28 if i >= n {
29
30 } else if c := a[i]; c < 0xff && c+1 < b[i] {
31 dst = append(dst, a[:i+1]...)
32 dst[len(dst)-1]++
33 return dst
34 }
35 return nil
36 }
37
38 func (bytesComparer) Successor(dst, b []byte) []byte {
39 for i, c := range b {
40 if c != 0xff {
41 dst = append(dst, b[:i+1]...)
42 dst[len(dst)-1]++
43 return dst
44 }
45 }
46 return nil
47 }
48
49
50
51 var DefaultComparer = bytesComparer{}
52
View as plain text