mirror of
https://github.com/soheilhy/cmux.git
synced 2025-09-16 19:50:59 +08:00
Use a custom buffer intead of buffers from bytes
This commit implements a new buffer that eliminates a few copies.
This commit is contained in:
42
buffer.go
Normal file
42
buffer.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package cmux
|
||||
|
||||
import "io"
|
||||
|
||||
type buffer struct {
|
||||
read int
|
||||
data []byte
|
||||
}
|
||||
|
||||
func (b *buffer) Read(p []byte) (n int, err error) {
|
||||
n = len(b.data) - b.read
|
||||
if n == 0 {
|
||||
return 0, io.EOF
|
||||
}
|
||||
|
||||
if len(p) < n {
|
||||
n = len(p)
|
||||
}
|
||||
|
||||
copy(p[:n], b.data[b.read:b.read+n])
|
||||
b.read += n
|
||||
return
|
||||
}
|
||||
|
||||
func (b *buffer) Len() int {
|
||||
return len(b.data) - b.read
|
||||
}
|
||||
|
||||
func (b *buffer) resetRead() {
|
||||
b.read = 0
|
||||
}
|
||||
|
||||
func (b *buffer) Write(p []byte) (n int, err error) {
|
||||
n = len(p)
|
||||
if b.data == nil {
|
||||
b.data = p[:n:n]
|
||||
return
|
||||
}
|
||||
|
||||
b.data = append(b.data, p...)
|
||||
return
|
||||
}
|
Reference in New Issue
Block a user