File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11package buf
22
3- import "github.com/sagernet/sing/common"
3+ import (
4+ "github.com/sagernet/sing/common"
5+ "io"
6+ )
47
58func 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+
1344func ToSliceMulti (buffers []* Buffer ) [][]byte {
1445 return common .Map (buffers , func (it * Buffer ) []byte {
1546 return it .Bytes ()
You can’t perform that action at this time.
0 commit comments