mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-27 17:15:18 +00:00
89 lines
2.9 KiB
Go
89 lines
2.9 KiB
Go
/*
|
|
* Copyright 2017 Dgraph Labs, Inc. and Contributors
|
|
* Modifications copyright (C) 2017 Andy Kimball and Contributors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package arenaskl
|
|
|
|
import "github.com/cockroachdb/pebble/internal/base"
|
|
|
|
// flushIterator is an iterator over the skiplist object. Use Skiplist.NewFlushIter
|
|
// to construct an iterator. The current state of the iterator can be cloned by
|
|
// simply value copying the struct.
|
|
type flushIterator struct {
|
|
Iterator
|
|
bytesIterated *uint64
|
|
}
|
|
|
|
// flushIterator implements the base.InternalIterator interface.
|
|
var _ base.InternalIterator = (*flushIterator)(nil)
|
|
|
|
func (it *flushIterator) String() string {
|
|
return "memtable"
|
|
}
|
|
|
|
func (it *flushIterator) SeekGE(
|
|
key []byte, flags base.SeekGEFlags,
|
|
) (*base.InternalKey, base.LazyValue) {
|
|
panic("pebble: SeekGE unimplemented")
|
|
}
|
|
|
|
func (it *flushIterator) SeekPrefixGE(
|
|
prefix, key []byte, flags base.SeekGEFlags,
|
|
) (*base.InternalKey, base.LazyValue) {
|
|
panic("pebble: SeekPrefixGE unimplemented")
|
|
}
|
|
|
|
func (it *flushIterator) SeekLT(
|
|
key []byte, flags base.SeekLTFlags,
|
|
) (*base.InternalKey, base.LazyValue) {
|
|
panic("pebble: SeekLT unimplemented")
|
|
}
|
|
|
|
// First seeks position at the first entry in list. Returns the key and value
|
|
// if the iterator is pointing at a valid entry, and (nil, nil) otherwise. Note
|
|
// that First only checks the upper bound. It is up to the caller to ensure
|
|
// that key is greater than or equal to the lower bound.
|
|
func (it *flushIterator) First() (*base.InternalKey, base.LazyValue) {
|
|
key, val := it.Iterator.First()
|
|
if key == nil {
|
|
return nil, base.LazyValue{}
|
|
}
|
|
*it.bytesIterated += uint64(it.nd.allocSize)
|
|
return key, val
|
|
}
|
|
|
|
// Next advances to the next position. Returns the key and value if the
|
|
// iterator is pointing at a valid entry, and (nil, nil) otherwise.
|
|
// Note: flushIterator.Next mirrors the implementation of Iterator.Next
|
|
// due to performance. Keep the two in sync.
|
|
func (it *flushIterator) Next() (*base.InternalKey, base.LazyValue) {
|
|
it.nd = it.list.getNext(it.nd, 0)
|
|
if it.nd == it.list.tail {
|
|
return nil, base.LazyValue{}
|
|
}
|
|
it.decodeKey()
|
|
*it.bytesIterated += uint64(it.nd.allocSize)
|
|
return &it.key, base.MakeInPlaceValue(it.value())
|
|
}
|
|
|
|
func (it *flushIterator) NextPrefix(succKey []byte) (*base.InternalKey, base.LazyValue) {
|
|
panic("pebble: NextPrefix unimplemented")
|
|
}
|
|
|
|
func (it *flushIterator) Prev() (*base.InternalKey, base.LazyValue) {
|
|
panic("pebble: Prev unimplemented")
|
|
}
|