Initial commit
This commit is contained in:
43
vendor/github.com/cockroachdb/pebble/internal/rangedel/rangedel.go
generated
vendored
Normal file
43
vendor/github.com/cockroachdb/pebble/internal/rangedel/rangedel.go
generated
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
// 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,
|
||||
}),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user