package db import ( "bytes" ) func IteratePrefix(db DB, prefix []byte) Iterator { var start, end []byte if len(prefix) == 0 { start = nil end = nil } else { start = cp(prefix) end = cpIncr(prefix) } return db.Iterator(start, end) } //---------------------------------------- func cp(bz []byte) (ret []byte) { ret = make([]byte, len(bz)) copy(ret, bz) return ret } // 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 } // 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 } }