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 }