46 lines
615 B
Go
46 lines
615 B
Go
|
|
package ts
|
|
|
|
import (
|
|
"io"
|
|
)
|
|
|
|
type iovec struct {
|
|
data [][]byte
|
|
Len int
|
|
}
|
|
|
|
func (self *iovec) Append(b []byte) {
|
|
self.data = append(self.data, b)
|
|
self.Len += len(b)
|
|
}
|
|
|
|
func (self *iovec) WriteTo(w io.Writer, n int) (written int, err error) {
|
|
for n > 0 && self.Len > 0 {
|
|
data := self.data[0]
|
|
|
|
var b []byte
|
|
if n > len(data) {
|
|
b = data
|
|
} else {
|
|
b = data[:n]
|
|
}
|
|
|
|
data = data[len(b):]
|
|
if len(data) == 0 {
|
|
self.data = self.data[1:]
|
|
} else {
|
|
self.data[0] = data
|
|
}
|
|
self.Len -= len(b)
|
|
n -= len(b)
|
|
written += len(b)
|
|
|
|
if _, err = w.Write(b); err != nil {
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|