read up to len(p), at off of the data stream.
(p []byte, off int64)
| 60 | |
| 61 | // read up to len(p), at off of the data stream. |
| 62 | func (rb *RingBuf) ReadAt(p []byte, off int64) (n int, err error) { |
| 63 | if off > rb.end || off < rb.begin { |
| 64 | err = ErrOutOfRange |
| 65 | return |
| 66 | } |
| 67 | readOff := rb.getDataOff(off) |
| 68 | readEnd := readOff + int(rb.end-off) |
| 69 | if readEnd <= len(rb.data) { |
| 70 | n = copy(p, rb.data[readOff:readEnd]) |
| 71 | } else { |
| 72 | n = copy(p, rb.data[readOff:]) |
| 73 | if n < len(p) { |
| 74 | n += copy(p[n:], rb.data[:readEnd-len(rb.data)]) |
| 75 | } |
| 76 | } |
| 77 | if n < len(p) { |
| 78 | err = io.EOF |
| 79 | } |
| 80 | return |
| 81 | } |
| 82 | |
| 83 | func (rb *RingBuf) getDataOff(off int64) int { |
| 84 | var dataOff int |