+
+type readerAtSeeker interface {
+ io.ReadSeeker
+ io.ReaderAt
+}
+
+type countingReaderAtSeeker struct {
+ readerAtSeeker
+ counter func(uint64)
+}
+
+func (crw *countingReaderAtSeeker) Read(buf []byte) (int, error) {
+ n, err := crw.readerAtSeeker.Read(buf)
+ crw.counter(uint64(n))
+ return n, err
+}
+
+func (crw *countingReaderAtSeeker) ReadAt(buf []byte, off int64) (int, error) {
+ n, err := crw.readerAtSeeker.ReadAt(buf, off)
+ crw.counter(uint64(n))
+ return n, err
+}