Simple bytes reader in pure V, adapted from go version of bytes.Reader
$v install https://github.com/blackshirt/buffer
and then import it in your modules.
// import module
import blackshirt.buffer
// create new reader with given arrays of bytes as an input.
// data := []u8
mut reader := buffer.new_reader(data)
// example read one byte
byte := r.read_byte()!
// read two byte
twobyte := r.read_u16()!
// do with a byte or two byte
and then you can call desired methods.
fn new_reader(b []u8) &Readercreate new Reader with big endianess set to true, for more other option, see new_reader_with_endianess function.
fn new_reader_with_endianess(b []u8, endian bool) &Readernew_reader_with_endianess create new reader.
fn (mut r Reader) reset(b []u8)resets the Reader to be reading from b
fn (r &Reader) remainder() intremainder tells the length of unread portion of buffer.
fn (r &Reader) cap() i64cap return capacity or original size of the buffer.
fn (mut r Reader) sub_reader(start i64, amount i64) !&Readersub_reader create sub Reader from defined current reader.
fn (mut r Reader) read_u8() !u8read_u8 read one byte and updates current index
fn (mut r Reader) read_byte() !u8read_byte is an alias for read_u8
fn (mut r Reader) peek_u8() !u8peek_u8 peek one byte without udpates current index
fn (mut r Reader) read(mut b []u8) !intimplements io.Reader read b.len bytes from reader, and updates current index
fn (mut r Reader) peek(mut b []u8) !intread b.len bytes from reader, without updates current index
fn (mut r Reader) read_sized(size int) !([]u8, int)read with size
fn (mut r Reader) peek_sized(size int) !([]u8, int)peek_sized peek with size
fn (mut r Reader) read_at_least(amount int) ![]u8read in amount size from current offset
fn (mut r Reader) skip(amount int)skip amount of bytes and updates index, its similar to peek but only update the index.
fn (mut r Reader) read_to_end() ![]u8read from current index to the end of the buffer update the idx to the last
fn (mut r Reader) read_u16() !u16read u16 size (two byte) from reader
fn (mut r Reader) peek_u16() !u16peek u16 size (two bytes) from reader.
fn (mut r Reader) read_u24() !intread_u24 read 3 bytes from reader, and return integer and updates index
fn (mut r Reader) peek_u24() !intpeek_u24 peek 3 bytes from reader without updates index.
fn (mut r Reader) read_u32() !u32read_u32 read u32size bytes data from reader and updatea index
fn (mut r Reader) peek_u32() !u32peek_u32 peek u32size bytes fron reader without updates index
fn (mut r Reader) read_u64() !u64read_u64 read u64size (8) bytes from reader and updates index
fn (mut r Reader) peek_u64() !u64peek_u64 peek u64size bytes from reader withhout updates index.
fn (r &Reader) remaining() ![]u8remaining bytes without update the index