代码拉取完成,页面将自动刷新
同步操作将从 平凯星辰(北京)科技有限公司/orc 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package orc
import (
"io"
)
type RunLengthIntegerReader struct {
r io.ByteReader
signed bool
literals []int64
numLiterals int
delta int
used int
repeat bool
minRepeatSize int
err error
nextByte *byte
}
func NewRunLengthIntegerReader(r io.ByteReader, signed bool) *RunLengthIntegerReader {
return &RunLengthIntegerReader{
r: r,
signed: signed,
literals: make([]int64, MaxLiteralSize),
minRepeatSize: MinRepeatSize,
}
}
func (r *RunLengthIntegerReader) readValues() error {
control, err := r.ReadByte()
if err != nil {
return err
}
if control < 0x80 {
r.numLiterals = int(control) + r.minRepeatSize
r.used = 0
r.repeat = true
delta, err := r.ReadByte()
if err != nil {
return err
}
r.delta = int(int8(delta))
if r.signed {
r.literals[0], err = readVslong(r)
if err != nil {
return err
}
} else {
r.literals[0], err = readVulong(r)
if err != nil {
return err
}
}
} else {
r.repeat = false
r.numLiterals = 0x100 - int(control)
r.used = 0
for i := 0; i < r.numLiterals; i++ {
if r.signed {
r.literals[i], err = readVslong(r)
if err != nil {
return err
}
} else {
r.literals[i], err = readVulong(r)
if err != nil {
return err
}
}
}
}
return nil
}
func (r *RunLengthIntegerReader) available() error {
byt, err := r.ReadByte()
if err != nil {
r.err = err
return err
}
r.nextByte = &byt
return nil
}
func (r *RunLengthIntegerReader) ReadByte() (byte, error) {
if r.nextByte != nil {
byt := *r.nextByte
r.nextByte = nil
return byt, nil
}
return r.r.ReadByte()
}
func (r *RunLengthIntegerReader) Next() bool {
return r.used != r.numLiterals || r.available() == nil
}
func (r *RunLengthIntegerReader) Int() int64 {
var result int64
if r.used == r.numLiterals {
err := r.readValues()
if err != nil {
return 0
}
}
if r.repeat {
result = r.literals[0] + int64(r.used*r.delta)
r.used++
} else {
result = r.literals[r.used]
r.used++
}
return result
}
func (r *RunLengthIntegerReader) Value() interface{} {
return r.Int()
}
func (r *RunLengthIntegerReader) Err() error {
return r.err
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。