func (b *FixedSizeRingBuf) ReadFrom(r io.Reader) (n int64, err error) {
	for {
		writeCapacity := b.N - b.Readable
		if writeCapacity <= 0 {
			// we are all full
			return n, nil
		}
		writeStart := (b.Beg + b.Readable) % b.N
		upperLim := intMin(writeStart+writeCapacity, b.N)

		m, e := r.Read(b.A[b.Use][writeStart:upperLim])
		n += int64(m)
		b.Readable += m
		if e == io.EOF {
			return n, nil
		}
		if e != nil {
			return n, e
		}
	}
}
func (b *FixedSizeRingBuf) ReadFrom(r io.Reader) (n int64, err error) {
	for {
		writeCapacity := b.N - b.Readable
		if writeCapacity <= 0 {
			
			return n, nil
		}
		writeStart := (b.Beg + b.Readable) % b.N
		upperLim := intMin(writeStart+writeCapacity, b.N)

		m, e := r.Read(b.A[b.Use][writeStart:upperLim])
		n += int64(m)
		b.Readable += m
		if e == io.EOF {
			return n, nil
		}
		if e != nil {
			return n, e
		}
	}
}
func ( b * FixedSizeRingBuf ) ReadFrom ( r io . Reader ) ( n int64 , err error ) { for { writeCapacity := b . N - b . Readable if writeCapacity <= 0 { // we are all full return n , nil } writeStart := ( b . Beg + b . Readable ) % b . N upperLim := intMin ( writeStart + writeCapacity , b . N ) m , e := r . Read ( b . A [ b . Use ] [ writeStart : upperLim ] ) n += int64 ( m ) b . Readable += m if e == io . EOF { return n , nil } if e != nil { return n , e } } }
// ReadFrom avoids intermediate allocation and copies.
// ReadFrom() reads data from r until EOF or error. The return value n
// is the number of bytes read. Any error except io.EOF encountered
// during the read is also returned.
ReadFrom avoids intermediate allocation and copies . ReadFrom () reads data from r until EOF or error . The return value n is the number of bytes read . Any error except io . EOF encountered during the read is also returned .