| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | 
							- package buf
 
- type MergingReader struct {
 
- 	reader        Reader
 
- 	timeoutReader TimeoutReader
 
- 	leftover      *Buffer
 
- }
 
- func NewMergingReader(reader Reader) Reader {
 
- 	return &MergingReader{
 
- 		reader:        reader,
 
- 		timeoutReader: reader.(TimeoutReader),
 
- 	}
 
- }
 
- func (r *MergingReader) Read() (*Buffer, error) {
 
- 	if r.leftover != nil {
 
- 		b := r.leftover
 
- 		r.leftover = nil
 
- 		return b, nil
 
- 	}
 
- 	b, err := r.reader.Read()
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	if b.IsFull() {
 
- 		return b, nil
 
- 	}
 
- 	if r.timeoutReader == nil {
 
- 		return b, nil
 
- 	}
 
- 	for {
 
- 		b2, err := r.timeoutReader.ReadTimeout(0)
 
- 		if err != nil {
 
- 			break
 
- 		}
 
- 		nBytes := b.Append(b2.Bytes())
 
- 		b2.SliceFrom(nBytes)
 
- 		if b2.IsEmpty() {
 
- 			b2.Release()
 
- 		} else {
 
- 			r.leftover = b2
 
- 			break
 
- 		}
 
- 	}
 
- 	return b, nil
 
- }
 
 
  |