github.com/ipld/go-ipld-prime@v0.21.0/traversal/selector/matcher_util.go (about)

     1  package selector
     2  
     3  import (
     4  	"io"
     5  )
     6  
     7  type readerat struct {
     8  	rs  io.ReadSeeker
     9  	off int64
    10  }
    11  
    12  // ReadAt provides the io.ReadAt method over a ReadSeeker. It will track the
    13  // current offset and seek if necessary.
    14  func (r *readerat) ReadAt(p []byte, off int64) (n int, err error) {
    15  	if off != r.off {
    16  		if _, err = r.rs.Seek(off, io.SeekStart); err != nil {
    17  			return 0, err
    18  		}
    19  		r.off = off
    20  	}
    21  	c, err := r.rs.Read(p)
    22  	if err != nil {
    23  		return c, err
    24  	}
    25  	r.off += int64(c)
    26  	return c, nil
    27  }