- package db
-
- import (
- "bytes"
- )
-
- func cp(bz []byte) (ret []byte) {
- ret = make([]byte, len(bz))
- copy(ret, bz)
- return ret
- }
-
- // Returns a slice of the same length (big endian)
- // except incremented by one.
- // Returns nil on overflow (e.g. if bz bytes are all 0xFF)
- // CONTRACT: len(bz) > 0
- func cpIncr(bz []byte) (ret []byte) {
- if len(bz) == 0 {
- panic("cpIncr expects non-zero bz length")
- }
- ret = cp(bz)
- for i := len(bz) - 1; i >= 0; i-- {
- if ret[i] < byte(0xFF) {
- ret[i]++
- return
- }
- ret[i] = byte(0x00)
- if i == 0 {
- // Overflow
- return nil
- }
- }
- return nil
- }
-
- // Returns a slice of the same length (big endian)
- // except decremented by one.
- // Returns nil on underflow (e.g. if bz bytes are all 0x00)
- // CONTRACT: len(bz) > 0
- func cpDecr(bz []byte) (ret []byte) {
- if len(bz) == 0 {
- panic("cpDecr expects non-zero bz length")
- }
- ret = cp(bz)
- for i := len(bz) - 1; i >= 0; i-- {
- if ret[i] > byte(0x00) {
- ret[i]--
- return
- }
- ret[i] = byte(0xFF)
- if i == 0 {
- // Underflow
- return nil
- }
- }
- return nil
- }
-
- // 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
- }
- }
|