forked from Shiloh/githaven
12a1f914f4
* update github.com/alecthomas/chroma v0.8.0 -> v0.8.1 * github.com/blevesearch/bleve v1.0.10 -> v1.0.12 * editorconfig-core-go v2.1.1 -> v2.3.7 * github.com/gliderlabs/ssh v0.2.2 -> v0.3.1 * migrate editorconfig.ParseBytes to Parse * github.com/shurcooL/vfsgen to 0d455de96546 * github.com/go-git/go-git/v5 v5.1.0 -> v5.2.0 * github.com/google/uuid v1.1.1 -> v1.1.2 * github.com/huandu/xstrings v1.3.0 -> v1.3.2 * github.com/klauspost/compress v1.10.11 -> v1.11.1 * github.com/markbates/goth v1.61.2 -> v1.65.0 * github.com/mattn/go-sqlite3 v1.14.0 -> v1.14.4 * github.com/mholt/archiver v3.3.0 -> v3.3.2 * github.com/microcosm-cc/bluemonday 4f7140c49acb -> v1.0.4 * github.com/minio/minio-go v7.0.4 -> v7.0.5 * github.com/olivere/elastic v7.0.9 -> v7.0.20 * github.com/urfave/cli v1.20.0 -> v1.22.4 * github.com/prometheus/client_golang v1.1.0 -> v1.8.0 * github.com/xanzy/go-gitlab v0.37.0 -> v0.38.1 * mvdan.cc/xurls v2.1.0 -> v2.2.0 Co-authored-by: Lauris BH <lauris@nix.lv>
119 lines
2.9 KiB
Go
Vendored
119 lines
2.9 KiB
Go
Vendored
// Copyright (c) 2019 Couchbase, Inc.
|
|
//
|
|
// 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 zap
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"fmt"
|
|
|
|
"github.com/blevesearch/bleve/index/scorch/segment"
|
|
)
|
|
|
|
type chunkedIntDecoder struct {
|
|
startOffset uint64
|
|
dataStartOffset uint64
|
|
chunkOffsets []uint64
|
|
curChunkBytes []byte
|
|
data []byte
|
|
r *segment.MemUvarintReader
|
|
}
|
|
|
|
// newChunkedIntDecoder expects an optional or reset chunkedIntDecoder for better reuse.
|
|
func newChunkedIntDecoder(buf []byte, offset uint64, rv *chunkedIntDecoder) *chunkedIntDecoder {
|
|
if rv == nil {
|
|
rv = &chunkedIntDecoder{startOffset: offset, data: buf}
|
|
} else {
|
|
rv.startOffset = offset
|
|
rv.data = buf
|
|
}
|
|
|
|
var n, numChunks uint64
|
|
var read int
|
|
if offset == termNotEncoded {
|
|
numChunks = 0
|
|
} else {
|
|
numChunks, read = binary.Uvarint(buf[offset+n : offset+n+binary.MaxVarintLen64])
|
|
}
|
|
|
|
n += uint64(read)
|
|
if cap(rv.chunkOffsets) >= int(numChunks) {
|
|
rv.chunkOffsets = rv.chunkOffsets[:int(numChunks)]
|
|
} else {
|
|
rv.chunkOffsets = make([]uint64, int(numChunks))
|
|
}
|
|
for i := 0; i < int(numChunks); i++ {
|
|
rv.chunkOffsets[i], read = binary.Uvarint(buf[offset+n : offset+n+binary.MaxVarintLen64])
|
|
n += uint64(read)
|
|
}
|
|
rv.dataStartOffset = offset + n
|
|
return rv
|
|
}
|
|
|
|
func (d *chunkedIntDecoder) loadChunk(chunk int) error {
|
|
if d.startOffset == termNotEncoded {
|
|
d.r = segment.NewMemUvarintReader([]byte(nil))
|
|
return nil
|
|
}
|
|
|
|
if chunk >= len(d.chunkOffsets) {
|
|
return fmt.Errorf("tried to load freq chunk that doesn't exist %d/(%d)",
|
|
chunk, len(d.chunkOffsets))
|
|
}
|
|
|
|
end, start := d.dataStartOffset, d.dataStartOffset
|
|
s, e := readChunkBoundary(chunk, d.chunkOffsets)
|
|
start += s
|
|
end += e
|
|
d.curChunkBytes = d.data[start:end]
|
|
if d.r == nil {
|
|
d.r = segment.NewMemUvarintReader(d.curChunkBytes)
|
|
} else {
|
|
d.r.Reset(d.curChunkBytes)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (d *chunkedIntDecoder) reset() {
|
|
d.startOffset = 0
|
|
d.dataStartOffset = 0
|
|
d.chunkOffsets = d.chunkOffsets[:0]
|
|
d.curChunkBytes = d.curChunkBytes[:0]
|
|
d.data = d.data[:0]
|
|
if d.r != nil {
|
|
d.r.Reset([]byte(nil))
|
|
}
|
|
}
|
|
|
|
func (d *chunkedIntDecoder) isNil() bool {
|
|
return d.curChunkBytes == nil || len(d.curChunkBytes) == 0
|
|
}
|
|
|
|
func (d *chunkedIntDecoder) readUvarint() (uint64, error) {
|
|
return d.r.ReadUvarint()
|
|
}
|
|
|
|
func (d *chunkedIntDecoder) SkipUvarint() {
|
|
d.r.SkipUvarint()
|
|
}
|
|
|
|
func (d *chunkedIntDecoder) SkipBytes(count int) {
|
|
d.r.SkipBytes(count)
|
|
}
|
|
|
|
func (d *chunkedIntDecoder) Len() int {
|
|
return d.r.Len()
|
|
}
|