v / vlib / encoding / xml / reader_util.v
30 lines · 26 sloc · 593 bytes · 757929392e0e7a75fc1272116460981e589737d5
Raw
1module xml
2
3import io
4
5fn next_char(mut reader io.Reader, mut buf []u8) !u8 {
6 if reader.read(mut buf)! == 0 {
7 return error('Unexpected End Of File.')
8 }
9 return buf[0]
10}
11
12struct FullBufferReader {
13 contents []u8
14mut:
15 position int
16}
17
18@[direct_array_access]
19fn (mut fbr FullBufferReader) read(mut buf []u8) !int {
20 if fbr.position >= fbr.contents.len {
21 return io.Eof{}
22 }
23 remaining := fbr.contents.len - fbr.position
24 n := if buf.len < remaining { buf.len } else { remaining }
25 unsafe {
26 vmemcpy(&u8(buf.data), &u8(fbr.contents.data) + fbr.position, n)
27 }
28 fbr.position += n
29 return n
30}
31