From e134dea4f4043df16210a85793ae1ee47051af46 Mon Sep 17 00:00:00 2001 From: nareix Date: Mon, 7 Dec 2015 23:30:43 +0800 Subject: [PATCH] add multiReadSeeker --- vecio.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 vecio.go diff --git a/vecio.go b/vecio.go new file mode 100644 index 0000000..fe5857b --- /dev/null +++ b/vecio.go @@ -0,0 +1,40 @@ + +package ts + +import ( + "io" +) + +func getSeekerLength(data io.Seeker) (length int64) { + length, _ = data.Seek(0, 2) + data.Seek(0, 0) + return +} + +type multiReadSeeker struct { + readers []io.ReadSeeker +} + +func (mr *multiReadSeeker) Seek(offset int64, whence int) (n int64, err error) { + if whence == 2 { + for _, reader := range mr.readers { + n += getSeekerLength(reader) + } + } + return +} + +func (mr *multiReadSeeker) Read(p []byte) (n int, err error) { + for len(mr.readers) > 0 { + n, err = mr.readers[0].Read(p) + if n > 0 || err != io.EOF { + if err == io.EOF { + err = nil + } + return + } + mr.readers = mr.readers[1:] + } + return 0, io.EOF +} +