github.com/insolar/vanilla@v0.0.0-20201023172447-248fdf805322/iokit/zerobytes.go (about)

     1  // Copyright 2020 Insolar Network Ltd.
     2  // All rights reserved.
     3  // This material is licensed under the Insolar License version 1.0,
     4  // available at https://github.com/insolar/assured-ledger/blob/master/LICENSE.md.
     5  
     6  package iokit
     7  
     8  import "io"
     9  
    10  var zeroBytes [1024]byte
    11  
    12  func WriteZeros(x int, w io.Writer) (int, error) {
    13  	total := 0
    14  	for ; x > len(zeroBytes); x -= len(zeroBytes) {
    15  		n, err := w.Write(zeroBytes[:])
    16  		total += n
    17  		if err != nil {
    18  			return total, err
    19  		}
    20  	}
    21  
    22  	n, err := w.Write(zeroBytes[:x])
    23  	total += n
    24  	return total, err
    25  }
    26  
    27  var _ io.ReadWriter = NullReadWriter{}
    28  var null = NullReadWriter{}
    29  
    30  type NullReadWriter struct{}
    31  
    32  func (p NullReadWriter) Read(b []byte) (int, error) {
    33  	for i := range b {
    34  		b[i] = 0
    35  	}
    36  	return len(b), nil
    37  }
    38  
    39  func (p NullReadWriter) Write(b []byte) (int, error) {
    40  	return len(b), nil
    41  }
    42  
    43  func Null() NullReadWriter {
    44  	return null
    45  }