32 lines
		
	
	
	
		
			766 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
	
		
			766 B
		
	
	
	
		
			Go
		
	
	
	
	
	
// 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}
 | 
						|
}
 |