//
// SPDX-License-Identifier: AGPL-3.0
-package main
+package keepstore
import (
"io"
)
-func NewCountingWriter(w io.Writer, f func(uint64)) io.WriteCloser {
+func newCountingWriter(w io.Writer, f func(uint64)) io.WriteCloser {
return &countingReadWriter{
writer: w,
counter: f,
}
}
-func NewCountingReader(r io.Reader, f func(uint64)) io.ReadCloser {
+func newCountingReader(r io.Reader, f func(uint64)) io.ReadCloser {
return &countingReadWriter{
reader: r,
counter: f,
}
}
+func newCountingReaderAtSeeker(r readerAtSeeker, f func(uint64)) *countingReaderAtSeeker {
+ return &countingReaderAtSeeker{readerAtSeeker: r, counter: f}
+}
+
type countingReadWriter struct {
reader io.Reader
writer io.Writer
}
return nil
}
+
+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
+}