| // Copyright (c) 2014, 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 util |
| |
| // Range is a key range. |
| type Range struct { |
| // Start of the key range, include in the range. |
| Start []byte |
| |
| // Limit of the key range, not include in the range. |
| Limit []byte |
| } |
| |
| // BytesPrefix returns key range that satisfy the given prefix. |
| // This only applicable for the standard 'bytes comparer'. |
| func BytesPrefix(prefix []byte) *Range { |
| var limit []byte |
| for i := len(prefix) - 1; i >= 0; i-- { |
| c := prefix[i] |
| if c < 0xff { |
| limit = make([]byte, i+1) |
| copy(limit, prefix) |
| limit[i] = c + 1 |
| break |
| } |
| } |
| return &Range{prefix, limit} |
| } |