github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/xio/latest.go (about)

     1  package xio
     2  
     3  // LatestBuffer is membory buffer to remain latest buffer size bytes
     4  type LatestBuffer struct {
     5  	buffer []byte
     6  	length int
     7  }
     8  
     9  // NewLatestBuffer will create remain bufffer
    10  func NewLatestBuffer(bufferSize int) (buffer *LatestBuffer) {
    11  	buffer = &LatestBuffer{
    12  		buffer: make([]byte, bufferSize),
    13  		length: 0,
    14  	}
    15  	return
    16  }
    17  
    18  // Bytes will get the having data
    19  func (r *LatestBuffer) Bytes() []byte {
    20  	return r.buffer[0:r.length]
    21  }
    22  
    23  func (r *LatestBuffer) Write(p []byte) (n int, err error) {
    24  	if len(p) > len(r.buffer) {
    25  		p = p[len(p)-len(r.buffer):]
    26  	}
    27  	offset := r.length
    28  	if len(p)+r.length > len(r.buffer) {
    29  		offset = len(r.buffer) - len(p)
    30  	}
    31  	if offset > 0 {
    32  		copy(r.buffer[0:], r.buffer[r.length-offset:])
    33  	}
    34  	n = copy(r.buffer[offset:], p)
    35  	r.length = offset + n
    36  	return
    37  }
    38  
    39  func (r *LatestBuffer) String() string {
    40  	return string(r.buffer[0:r.length])
    41  }