MCPcopy Index your code
hub / github.com/perkeep/perkeep / ReadAt

Method ReadAt

pkg/schema/filereader.go:174–204  ·  view source on GitHub ↗
(p []byte, offset int64)

Source from the content-addressed store, hash-verified

172func (fr *FileReader) Close() error { return nil }
173
174func (fr *FileReader) ReadAt(p []byte, offset int64) (n int, err error) {
175 if offset < 0 {
176 return 0, errors.New("schema/filereader: negative offset")
177 }
178 if offset >= fr.Size() {
179 return 0, io.EOF
180 }
181 want := len(p)
182 for len(p) > 0 && err == nil {
183 rc, err := fr.readerForOffset(context.TODO(), offset)
184 if err != nil {
185 return n, err
186 }
187 var n1 int
188 n1, err = io.ReadFull(rc, p)
189 rc.Close()
190 if err == io.EOF || err == io.ErrUnexpectedEOF {
191 err = nil
192 }
193 if n1 == 0 {
194 break
195 }
196 p = p[n1:]
197 offset += int64(n1)
198 n += n1
199 }
200 if n < want && err == nil {
201 err = io.ErrUnexpectedEOF
202 }
203 return n, err
204}
205
206// ForeachChunk calls fn for each chunk of fr, in order.
207//

Callers 1

TestReaderEfficiencyFunction · 0.95

Calls 3

readerForOffsetMethod · 0.95
SizeMethod · 0.65
CloseMethod · 0.65

Tested by 1

TestReaderEfficiencyFunction · 0.76