in pkg/unpack/reader.go [68:95]
func (r *UnpackReader) ReadAt(p []byte, off int64) (int, error) {
if len(p) == 0 {
return 0, nil
}
if off >= r.totalDigits {
return 0, io.EOF
}
start, n, pre, _ := ToPackedOffsets(off, r.blockSize, int64(len(p)), ycd.DigitsPerWord(r.radix))
packed := make([]byte, n)
read, err := r.rd.ReadAt(packed, start)
if read == 0 {
return 0, err
}
if read%WordSize != 0 {
return 0, fmt.Errorf("read %v bytes: %w", read, ErrNotFullWord)
}
remaining := len(p)
if remaining > int(r.totalDigits-off) {
remaining = int(r.totalDigits - off)
err = io.EOF
}
written, perr := r.unpack(p[:remaining], packed[:read], off, pre)
if perr != nil {
return written, fmt.Errorf("unpack error at off %v: %w", off, perr)
}
return written, err
}