tendermint/db/util.go

61 lines
1.0 KiB
Go
Raw Normal View History

package db
2017-12-12 18:08:38 -08:00
import (
"bytes"
)
2017-12-12 14:00:03 -08:00
func IteratePrefix(db DB, prefix []byte) Iterator {
var start, end []byte
if len(prefix) == 0 {
start = nil
end = nil
2017-12-12 14:00:03 -08:00
} else {
start = cp(prefix)
end = cpIncr(prefix)
}
2017-12-12 14:00:03 -08:00
return db.Iterator(start, end)
}
2017-12-12 14:00:03 -08:00
//----------------------------------------
2017-12-12 14:00:03 -08:00
func cp(bz []byte) (ret []byte) {
ret = make([]byte, len(bz))
copy(ret, bz)
return ret
}
2017-12-12 14:00:03 -08:00
// CONTRACT: len(bz) > 0
func cpIncr(bz []byte) (ret []byte) {
ret = cp(bz)
for i := len(bz) - 1; i >= 0; i-- {
if ret[i] < byte(0xFF) {
ret[i] += 1
return
} else {
ret[i] = byte(0x00)
}
}
return nil
}
2017-12-12 18:08:38 -08:00
// See DB interface documentation for more information.
func IsKeyInDomain(key, start, end []byte, isReverse bool) bool {
if !isReverse {
if bytes.Compare(key, start) < 0 {
return false
}
if end != nil && bytes.Compare(end, key) <= 0 {
return false
}
return true
} else {
if start != nil && bytes.Compare(start, key) < 0 {
return false
}
if end != nil && bytes.Compare(key, end) <= 0 {
return false
}
return true
}
2017-12-12 18:08:38 -08:00
}