MCPcopy Create free account
hub / github.com/GoEdgeLab/EdgeNode / ReadAt

Method ReadAt

internal/utils/bfs/file_reader.go:41–71  ·  view source on GitHub ↗
(b []byte, offset int64)

Source from the content-addressed store, hash-verified

39}
40
41func (this *FileReader) ReadAt(b []byte, offset int64) (n int, err error) {
42 if offset >= this.fileHeader.MaxOffset() {
43 err = io.EOF
44 return
45 }
46
47 blockInfo, ok := this.fileHeader.BlockAt(offset)
48 if !ok {
49 err = errors.New("could not find block at '" + types.String(offset) + "'")
50 return
51 }
52
53 var delta = offset - blockInfo.OriginOffsetFrom
54 var bFrom = blockInfo.BFileOffsetFrom + delta
55 var bTo = blockInfo.BFileOffsetTo
56 if bFrom > bTo {
57 err = errors.New("invalid block information")
58 return
59 }
60
61 var bufLen = len(b)
62 if int64(bufLen) > bTo-bFrom {
63 bufLen = int(bTo - bFrom)
64 }
65
66 AckReadThread()
67 n, err = this.fp.ReadAt(b[:bufLen], bFrom)
68 ReleaseReadThread()
69
70 return
71}
72
73func (this *FileReader) Reset(fileHeader *FileHeader) {
74 this.fileHeader = fileHeader

Callers 2

ReadMethod · 0.95
TestFileReader_ReadAtFunction · 0.45

Calls 5

AckReadThreadFunction · 0.85
ReleaseReadThreadFunction · 0.85
MaxOffsetMethod · 0.80
BlockAtMethod · 0.80
StringMethod · 0.45

Tested by 1

TestFileReader_ReadAtFunction · 0.36