Skip to content

Commit cc74a33

Browse files
committed
Add multi buf funcs
1 parent 07f7dca commit cc74a33

1 file changed

Lines changed: 32 additions & 1 deletion

File tree

common/buf/multi.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package buf
22

3-
import "github.com/sagernet/sing/common"
3+
import (
4+
"github.com/sagernet/sing/common"
5+
"io"
6+
)
47

58
func LenMulti(buffers []*Buffer) int {
69
var n int
@@ -10,6 +13,34 @@ func LenMulti(buffers []*Buffer) int {
1013
return n
1114
}
1215

16+
func WriteMulti(writer io.Writer, buffers []*Buffer) error {
17+
for _, buffer := range buffers {
18+
_, err := writer.Write(buffer.Bytes())
19+
if err != nil {
20+
ReleaseMulti(buffers)
21+
return err
22+
}
23+
buffer.Release()
24+
}
25+
return nil
26+
}
27+
28+
func MergeMulti(buffers []*Buffer) *Buffer {
29+
switch len(buffers) {
30+
case 0:
31+
panic("empty buffers")
32+
case 1:
33+
return buffers[0]
34+
default:
35+
newBuffer := NewSize(LenMulti(buffers))
36+
for _, buffer := range buffers {
37+
common.Must1(newBuffer.Write(buffer.Bytes()))
38+
buffer.Release()
39+
}
40+
return newBuffer
41+
}
42+
}
43+
1344
func ToSliceMulti(buffers []*Buffer) [][]byte {
1445
return common.Map(buffers, func(it *Buffer) []byte {
1546
return it.Bytes()

0 commit comments

Comments
 (0)