func()

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
}