|
@@ -2,25 +2,25 @@ package bufio
|
|
|
|
|
|
import "core:io"
|
|
|
|
|
|
-// Loadahead_Reader provides io lookahead.
|
|
|
+// Lookahead_Reader provides io lookahead.
|
|
|
// This is useful for tokenizers/parsers.
|
|
|
-// Loadahead_Reader is similar to bufio.Reader, but unlike bufio.Reader, Loadahead_Reader's buffer size
|
|
|
+// Lookahead_Reader is similar to bufio.Reader, but unlike bufio.Reader, Lookahead_Reader's buffer size
|
|
|
// will EXACTLY match the specified size, whereas bufio.Reader's buffer size may differ from the specified size.
|
|
|
// This makes sure that the buffer will not be accidentally read beyond the expected size.
|
|
|
-Loadahead_Reader :: struct {
|
|
|
+Lookahead_Reader :: struct {
|
|
|
r: io.Reader,
|
|
|
buf: []byte,
|
|
|
n: int,
|
|
|
}
|
|
|
|
|
|
-lookahead_reader_init :: proc(lr: ^Loadahead_Reader, r: io.Reader, buf: []byte) -> ^Loadahead_Reader {
|
|
|
+lookahead_reader_init :: proc(lr: ^Lookahead_Reader, r: io.Reader, buf: []byte) -> ^Lookahead_Reader {
|
|
|
lr.r = r
|
|
|
lr.buf = buf
|
|
|
lr.n = 0
|
|
|
return lr
|
|
|
}
|
|
|
|
|
|
-lookahead_reader_buffer :: proc(lr: ^Loadahead_Reader) -> []byte {
|
|
|
+lookahead_reader_buffer :: proc(lr: ^Lookahead_Reader) -> []byte {
|
|
|
return lr.buf[:lr.n]
|
|
|
}
|
|
|
|
|
@@ -28,7 +28,7 @@ lookahead_reader_buffer :: proc(lr: ^Loadahead_Reader) -> []byte {
|
|
|
// lookahead_reader_peek returns a slice of the Lookahead_Reader which holds n bytes
|
|
|
// If the Lookahead_Reader cannot hold enough bytes, it will read from the underlying reader to populate the rest.
|
|
|
// NOTE: The returned buffer is not a copy of the underlying buffer
|
|
|
-lookahead_reader_peek :: proc(lr: ^Loadahead_Reader, n: int) -> ([]byte, io.Error) {
|
|
|
+lookahead_reader_peek :: proc(lr: ^Lookahead_Reader, n: int) -> ([]byte, io.Error) {
|
|
|
switch {
|
|
|
case n < 0:
|
|
|
return nil, .Negative_Read
|
|
@@ -58,13 +58,13 @@ lookahead_reader_peek :: proc(lr: ^Loadahead_Reader, n: int) -> ([]byte, io.Erro
|
|
|
// lookahead_reader_peek_all returns a slice of the Lookahead_Reader populating the full buffer
|
|
|
// If the Lookahead_Reader cannot hold enough bytes, it will read from the underlying reader to populate the rest.
|
|
|
// NOTE: The returned buffer is not a copy of the underlying buffer
|
|
|
-lookahead_reader_peek_all :: proc(lr: ^Loadahead_Reader) -> ([]byte, io.Error) {
|
|
|
+lookahead_reader_peek_all :: proc(lr: ^Lookahead_Reader) -> ([]byte, io.Error) {
|
|
|
return lookahead_reader_peek(lr, len(lr.buf))
|
|
|
}
|
|
|
|
|
|
|
|
|
// lookahead_reader_consume drops the first n populated bytes from the Lookahead_Reader.
|
|
|
-lookahead_reader_consume :: proc(lr: ^Loadahead_Reader, n: int) -> io.Error {
|
|
|
+lookahead_reader_consume :: proc(lr: ^Lookahead_Reader, n: int) -> io.Error {
|
|
|
switch {
|
|
|
case n == 0:
|
|
|
return nil
|
|
@@ -78,6 +78,6 @@ lookahead_reader_consume :: proc(lr: ^Loadahead_Reader, n: int) -> io.Error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-lookahead_reader_consume_all :: proc(lr: ^Loadahead_Reader) -> io.Error {
|
|
|
+lookahead_reader_consume_all :: proc(lr: ^Lookahead_Reader) -> io.Error {
|
|
|
return lookahead_reader_consume(lr, lr.n)
|
|
|
}
|