github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/utils/fast/buffer.go (about) 1 package fast 2 3 type Reader struct { 4 buf []byte 5 offset int 6 } 7 8 type Writer struct { 9 buf []byte 10 } 11 12 // NewReader wraps bytes with reading buffer. 13 func NewReader(bb []byte) *Reader { 14 return &Reader{ 15 buf: bb, 16 offset: 0, 17 } 18 } 19 20 // NewWriter wraps bytes with writing buffer. 21 func NewWriter(bb []byte) *Writer { 22 return &Writer{ 23 buf: bb, 24 } 25 } 26 27 // WriteByte to the buffer. 28 func (b *Writer) WriteByte(v byte) { 29 b.buf = append(b.buf, v) 30 } 31 32 // Write the byte to the buffer. 33 func (b *Writer) Write(v []byte) { 34 b.buf = append(b.buf, v...) 35 } 36 37 // Read n bytes. 38 func (b *Reader) Read(n int) []byte { 39 var res []byte 40 res = b.buf[b.offset : b.offset+n] 41 b.offset += n 42 43 return res 44 } 45 46 // ReadByte reads 1 byte. 47 func (b *Reader) ReadByte() byte { 48 var res byte 49 res = b.buf[b.offset] 50 b.offset++ 51 52 return res 53 } 54 55 // Position of internal cursor. 56 func (b *Reader) Position() int { 57 return b.offset 58 } 59 60 // Bytes of internal buffer 61 func (b *Reader) Bytes() []byte { 62 return b.buf 63 } 64 65 // Bytes of internal buffer 66 func (b *Writer) Bytes() []byte { 67 return b.buf 68 } 69 70 // Empty returns true if the whole buffer is consumed 71 func (b *Reader) Empty() bool { 72 return len(b.buf) == b.offset 73 }