New Expandable file formats (#95)
This commit is contained in:
parent
15c72452de
commit
8d9a9281c9
26 changed files with 808 additions and 346 deletions
|
@ -5,40 +5,6 @@ import (
|
|||
"sync"
|
||||
)
|
||||
|
||||
type readAtWrapper struct {
|
||||
mu sync.Mutex
|
||||
|
||||
io.ReadSeeker
|
||||
io.ReaderAt
|
||||
io.Closer
|
||||
}
|
||||
|
||||
func NewReadAtWrapper(r io.ReadSeeker) Reader {
|
||||
return &readAtWrapper{ReadSeeker: r}
|
||||
}
|
||||
|
||||
func (rw *readAtWrapper) ReadAt(p []byte, off int64) (int, error) {
|
||||
rw.mu.Lock()
|
||||
defer rw.mu.Unlock()
|
||||
_, err := rw.Seek(off, io.SeekStart)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return io.ReadAtLeast(rw, p, len(p))
|
||||
}
|
||||
|
||||
func (rw *readAtWrapper) Close() error {
|
||||
rw.mu.Lock()
|
||||
defer rw.mu.Unlock()
|
||||
c, ok := rw.ReadSeeker.(io.Closer)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
return c.Close()
|
||||
}
|
||||
|
||||
type seekerWrapper struct {
|
||||
mu sync.Mutex
|
||||
pos int64
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package iio_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
|
@ -12,28 +11,6 @@ import (
|
|||
|
||||
var testData []byte = []byte("Hello World")
|
||||
|
||||
func TestReadAtWrapper(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
require := require.New(t)
|
||||
|
||||
br := bytes.NewReader(testData)
|
||||
|
||||
r := iio.NewReadAtWrapper(br)
|
||||
defer r.Close()
|
||||
|
||||
toRead := make([]byte, 5)
|
||||
n, err := r.ReadAt(toRead, 6)
|
||||
require.NoError(err)
|
||||
require.Equal(5, n)
|
||||
require.Equal("World", string(toRead))
|
||||
|
||||
n, err = r.ReadAt(toRead, 0)
|
||||
require.NoError(err)
|
||||
require.Equal(5, n)
|
||||
require.Equal("Hello", string(toRead))
|
||||
}
|
||||
|
||||
func TestSeekerWrapper(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue