github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/lib/readers/pattern_reader.go (about)

     1  package readers
     2  
     3  import "io"
     4  
     5  // NewPatternReader creates a reader, that returns a deterministic byte pattern.
     6  // After length bytes are read
     7  func NewPatternReader(length int64) io.Reader {
     8  	return &patternReader{
     9  		length: length,
    10  	}
    11  }
    12  
    13  type patternReader struct {
    14  	length int64
    15  	c      byte
    16  }
    17  
    18  func (r *patternReader) Read(p []byte) (n int, err error) {
    19  	for i := range p {
    20  		if r.length <= 0 {
    21  			return n, io.EOF
    22  		}
    23  		p[i] = r.c
    24  		r.c = (r.c + 1) % 253
    25  		r.length--
    26  		n++
    27  	}
    28  	return
    29  }