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  }