mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 02:57:26 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2022 The LevelDB-Go and Pebble Authors. All rights reserved. Use
 | 
						|
// of this source code is governed by a BSD-style license that can be found in
 | 
						|
// the LICENSE file.
 | 
						|
 | 
						|
package rangedel
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/cockroachdb/pebble/internal/base"
 | 
						|
	"github.com/cockroachdb/pebble/internal/keyspan"
 | 
						|
)
 | 
						|
 | 
						|
// Encode takes a Span containing only range deletions. It invokes the provided
 | 
						|
// closure with the encoded internal keys that represent the Span's state. The
 | 
						|
// keys and values passed to emit are only valid until the closure returns.  If
 | 
						|
// emit returns an error, Encode stops and returns the error.
 | 
						|
func Encode(s *keyspan.Span, emit func(k base.InternalKey, v []byte) error) error {
 | 
						|
	for _, k := range s.Keys {
 | 
						|
		if k.Kind() != base.InternalKeyKindRangeDelete {
 | 
						|
			return base.CorruptionErrorf("pebble: rangedel.Encode cannot encode %s key", k.Kind())
 | 
						|
		}
 | 
						|
		ik := base.InternalKey{
 | 
						|
			UserKey: s.Start,
 | 
						|
			Trailer: k.Trailer,
 | 
						|
		}
 | 
						|
		if err := emit(ik, s.End); err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
// Decode takes an internal key pair encoding a range deletion and returns a
 | 
						|
// decoded keyspan containing the key. If keysDst is provided, the key will be
 | 
						|
// appended to keysDst, avoiding an allocation.
 | 
						|
func Decode(ik base.InternalKey, v []byte, keysDst []keyspan.Key) keyspan.Span {
 | 
						|
	return keyspan.Span{
 | 
						|
		Start: ik.UserKey,
 | 
						|
		End:   v,
 | 
						|
		Keys: append(keysDst, keyspan.Key{
 | 
						|
			Trailer: ik.Trailer,
 | 
						|
		}),
 | 
						|
	}
 | 
						|
}
 |