|
|
// 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
import "bytes"
type bytesComparer struct{}
func (bytesComparer) Compare(a, b []byte) int { return bytes.Compare(a, b) }
func (bytesComparer) Name() string { return "leveldb.BytewiseComparator" }
func (bytesComparer) Separator(dst, a, b []byte) []byte { i, n := 0, len(a) if n > len(b) { n = len(b) } for ; i < n && a[i] == b[i]; i++ { } if i >= n { // Do not shorten if one string is a prefix of the other
} else if c := a[i]; c < 0xff && c+1 < b[i] { dst = append(dst, a[:i+1]...) dst[i]++ return dst } return nil }
func (bytesComparer) Successor(dst, b []byte) []byte { for i, c := range b { if c != 0xff { dst = append(dst, b[:i+1]...) dst[i]++ return dst } } return nil }
// DefaultComparer are default implementation of the Comparer interface.
// It uses the natural ordering, consistent with bytes.Compare.
var DefaultComparer = bytesComparer{}
|