| 1234567891011121314151617181920212223242526272829303132333435363738 |
- package wrappers
-
- import "bytes"
-
- type BufferedReader struct {
- Buffer *bytes.Buffer
- }
-
- func (b *BufferedReader) BufferedRead(p []byte, callback func() error) (int, error) {
- if b.Buffer.Len() > 0 {
- return b.flush(p)
- }
- if err := callback(); err != nil {
- return 0, err
- }
- return b.flush(p)
- }
-
- func (b *BufferedReader) flush(p []byte) (int, error) {
- sizeToRead := len(p)
- if b.Buffer.Len() < sizeToRead {
- sizeToRead = b.Buffer.Len()
- }
-
- data := b.Buffer.Bytes()
- copy(p, data[:sizeToRead])
- if sizeToRead == b.Buffer.Len() {
- b.Buffer.Reset()
- } else {
- b.Buffer = bytes.NewBuffer(data[sizeToRead:])
- }
-
- return sizeToRead, nil
- }
-
- func NewBufferedReader() BufferedReader {
- return BufferedReader{Buffer: &bytes.Buffer{}}
- }
|