69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
// Copyright 2024 PingCAP, Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package data
|
|
|
|
func keyEq(a, b []byte) bool {
|
|
if len(a) != len(b) {
|
|
return false
|
|
}
|
|
for i := 0; i < len(a); i++ {
|
|
if a[i] != b[i] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func keyCmp(a, b []byte) int {
|
|
var length int
|
|
var chosen int
|
|
if len(a) < len(b) {
|
|
length = len(a)
|
|
chosen = -1
|
|
} else if len(a) == len(b) {
|
|
length = len(a)
|
|
chosen = 0
|
|
} else {
|
|
length = len(b)
|
|
chosen = 1
|
|
}
|
|
for i := 0; i < length; i++ {
|
|
if a[i] < b[i] {
|
|
return -1
|
|
} else if a[i] > b[i] {
|
|
return 1
|
|
}
|
|
}
|
|
return chosen
|
|
}
|
|
|
|
func keyCmpInterface(a, b any) int {
|
|
return keyCmp(a.([]byte), b.([]byte))
|
|
}
|
|
|
|
func PrefixStartKey(key []byte) []byte {
|
|
var sk = make([]byte, 0, len(key)+1)
|
|
sk = append(sk, 'z')
|
|
sk = append(sk, key...)
|
|
return sk
|
|
}
|
|
|
|
func PrefixEndKey(key []byte) []byte {
|
|
if len(key) == 0 {
|
|
return []byte{'z' + 1}
|
|
}
|
|
return PrefixStartKey(key)
|
|
}
|