return Reader.{ s };
}
+read_byte :: (use reader: ^Reader) -> u8 {
+ err, byte := stream_read_byte(stream);
+ return byte;
+}
+
read_u32 :: (use reader: ^Reader) -> u32 {
n: u32 = 0;
return out;
}
-read_word :: (use reader: ^Reader, allocator := context.allocator) -> str {
+read_word :: (use reader: ^Reader, numeric_allowed := false, allocator := context.allocator) -> str {
skip_whitespace(reader);
_, curr_pos := stream_tell(stream);
|| (curr >= #char "A" && curr <= #char "Z")
|| curr == #char "_" {
count += 1;
+ } elseif numeric_allowed && (curr >= #char "0" && curr <= #char "9") {
+ count += 1;
} else {
break;
}
return out;
}
+read_until :: (use reader: ^Reader, until: u8, allocator := context.allocator, consume_end := false) -> str {
+ _, curr_pos := stream_tell(stream);
+
+ count := 0;
+ err, curr := stream_read_byte(stream);
+
+ while true {
+ if curr != until {
+ count += 1;
+ } else {
+ break;
+ }
+
+ err, curr = stream_read_byte(stream);
+ if err != Error.None do break;
+ }
+
+ if consume_end do count += 1;
+
+ stream_seek(stream, curr_pos, SeekFrom.Start);
+
+ out := str.{
+ data = raw_alloc(allocator, count * sizeof(u8)),
+ count = count,
+ };
+
+ stream_read(stream, out);
+ return out;
+}
+
+peek_byte :: (use reader: ^Reader) -> u8 {
+ err, byte := stream_peek_byte(stream);
+ return byte;
+}
+
advance_line :: (use reader: ^Reader) {
err, curr := stream_read_byte(stream);
if err != Error.None do return;
case #default do return;
}
}
-}
\ No newline at end of file
+}