mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 03:07:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			126 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.8 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 keyspan
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
 | 
						|
	"github.com/cockroachdb/pebble/internal/base"
 | 
						|
)
 | 
						|
 | 
						|
// InternalIteratorShim is a temporary iterator type used as a shim between
 | 
						|
// keyspan.MergingIter and base.InternalIterator. It's used temporarily for
 | 
						|
// range deletions during compactions, allowing range deletions to be
 | 
						|
// interleaved by a compaction input iterator.
 | 
						|
//
 | 
						|
// TODO(jackson): This type should be removed, and the usages converted to using
 | 
						|
// an InterleavingIterator type that interleaves keyspan.Spans from a
 | 
						|
// keyspan.FragmentIterator with point keys.
 | 
						|
type InternalIteratorShim struct {
 | 
						|
	miter   MergingIter
 | 
						|
	mbufs   MergingBuffers
 | 
						|
	span    *Span
 | 
						|
	iterKey base.InternalKey
 | 
						|
}
 | 
						|
 | 
						|
// Assert that InternalIteratorShim implements InternalIterator.
 | 
						|
var _ base.InternalIterator = &InternalIteratorShim{}
 | 
						|
 | 
						|
// Init initializes the internal iterator shim to merge the provided fragment
 | 
						|
// iterators.
 | 
						|
func (i *InternalIteratorShim) Init(cmp base.Compare, iters ...FragmentIterator) {
 | 
						|
	i.miter.Init(cmp, noopTransform, &i.mbufs, iters...)
 | 
						|
}
 | 
						|
 | 
						|
// Span returns the span containing the full set of keys over the key span at
 | 
						|
// the current iterator position.
 | 
						|
func (i *InternalIteratorShim) Span() *Span {
 | 
						|
	return i.span
 | 
						|
}
 | 
						|
 | 
						|
// SeekGE implements (base.InternalIterator).SeekGE.
 | 
						|
func (i *InternalIteratorShim) SeekGE(
 | 
						|
	key []byte, flags base.SeekGEFlags,
 | 
						|
) (*base.InternalKey, base.LazyValue) {
 | 
						|
	panic("unimplemented")
 | 
						|
}
 | 
						|
 | 
						|
// SeekPrefixGE implements (base.InternalIterator).SeekPrefixGE.
 | 
						|
func (i *InternalIteratorShim) SeekPrefixGE(
 | 
						|
	prefix, key []byte, flags base.SeekGEFlags,
 | 
						|
) (*base.InternalKey, base.LazyValue) {
 | 
						|
	panic("unimplemented")
 | 
						|
}
 | 
						|
 | 
						|
// SeekLT implements (base.InternalIterator).SeekLT.
 | 
						|
func (i *InternalIteratorShim) SeekLT(
 | 
						|
	key []byte, flags base.SeekLTFlags,
 | 
						|
) (*base.InternalKey, base.LazyValue) {
 | 
						|
	panic("unimplemented")
 | 
						|
}
 | 
						|
 | 
						|
// First implements (base.InternalIterator).First.
 | 
						|
func (i *InternalIteratorShim) First() (*base.InternalKey, base.LazyValue) {
 | 
						|
	i.span = i.miter.First()
 | 
						|
	for i.span != nil && i.span.Empty() {
 | 
						|
		i.span = i.miter.Next()
 | 
						|
	}
 | 
						|
	if i.span == nil {
 | 
						|
		return nil, base.LazyValue{}
 | 
						|
	}
 | 
						|
	i.iterKey = base.InternalKey{UserKey: i.span.Start, Trailer: i.span.Keys[0].Trailer}
 | 
						|
	return &i.iterKey, base.MakeInPlaceValue(i.span.End)
 | 
						|
}
 | 
						|
 | 
						|
// Last implements (base.InternalIterator).Last.
 | 
						|
func (i *InternalIteratorShim) Last() (*base.InternalKey, base.LazyValue) {
 | 
						|
	panic("unimplemented")
 | 
						|
}
 | 
						|
 | 
						|
// Next implements (base.InternalIterator).Next.
 | 
						|
func (i *InternalIteratorShim) Next() (*base.InternalKey, base.LazyValue) {
 | 
						|
	i.span = i.miter.Next()
 | 
						|
	for i.span != nil && i.span.Empty() {
 | 
						|
		i.span = i.miter.Next()
 | 
						|
	}
 | 
						|
	if i.span == nil {
 | 
						|
		return nil, base.LazyValue{}
 | 
						|
	}
 | 
						|
	i.iterKey = base.InternalKey{UserKey: i.span.Start, Trailer: i.span.Keys[0].Trailer}
 | 
						|
	return &i.iterKey, base.MakeInPlaceValue(i.span.End)
 | 
						|
}
 | 
						|
 | 
						|
// NextPrefix implements (base.InternalIterator).NextPrefix.
 | 
						|
func (i *InternalIteratorShim) NextPrefix([]byte) (*base.InternalKey, base.LazyValue) {
 | 
						|
	panic("unimplemented")
 | 
						|
}
 | 
						|
 | 
						|
// Prev implements (base.InternalIterator).Prev.
 | 
						|
func (i *InternalIteratorShim) Prev() (*base.InternalKey, base.LazyValue) {
 | 
						|
	panic("unimplemented")
 | 
						|
}
 | 
						|
 | 
						|
// Error implements (base.InternalIterator).Error.
 | 
						|
func (i *InternalIteratorShim) Error() error {
 | 
						|
	return i.miter.Error()
 | 
						|
}
 | 
						|
 | 
						|
// Close implements (base.InternalIterator).Close.
 | 
						|
func (i *InternalIteratorShim) Close() error {
 | 
						|
	return i.miter.Close()
 | 
						|
}
 | 
						|
 | 
						|
// SetBounds implements (base.InternalIterator).SetBounds.
 | 
						|
func (i *InternalIteratorShim) SetBounds(lower, upper []byte) {
 | 
						|
}
 | 
						|
 | 
						|
// SetContext implements (base.InternalIterator).SetContext.
 | 
						|
func (i *InternalIteratorShim) SetContext(_ context.Context) {}
 | 
						|
 | 
						|
// String implements fmt.Stringer.
 | 
						|
func (i *InternalIteratorShim) String() string {
 | 
						|
	return i.miter.String()
 | 
						|
}
 |