merge_reader.go 581 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package buf
  2. type MergingReader struct {
  3. reader Reader
  4. leftover *Buffer
  5. }
  6. func NewMergingReader(reader Reader) Reader {
  7. return &MergingReader{
  8. reader: reader,
  9. }
  10. }
  11. func (r *MergingReader) Read() (*Buffer, error) {
  12. if r.leftover != nil {
  13. return r.leftover, nil
  14. }
  15. b, err := r.reader.Read()
  16. if err != nil {
  17. return nil, err
  18. }
  19. if b.IsFull() {
  20. return b, nil
  21. }
  22. b2, err := r.reader.Read()
  23. if err != nil {
  24. return b, nil
  25. }
  26. nBytes := b.Append(b2.Bytes())
  27. b2.SliceFrom(nBytes)
  28. if b2.IsEmpty() {
  29. b2.Release()
  30. } else {
  31. r.leftover = b2
  32. }
  33. return b, nil
  34. }