Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › Io/ › File/ › Reader.zig › seekBy
seekBy
Reader.seekBy
pub fn seekBy (r : *Reader , offset : i64 ) SeekError !void
File
Code
pub fn seekBy (r : *Reader , offset : i64 ) SeekError !void {
const io = r .io ;
switch (r .mode ) {
.positional , .positional_simple => {
setLogicalPos (r , @intCast (@as (i64 , @intCast (logicalPos (r ))) + offset ));
},
.streaming , .streaming_simple => {
const seek_err = r .seek_err orelse e : {
if (io .vtable .fileSeekBy (io .userdata , r .file , offset )) |_ | {
setLogicalPos (r , @intCast (@as (i64 , @intCast (logicalPos (r ))) + offset ));
return ;
} else |err | {
r .seek_err = err ;
break :e err ;
}
};
var remaining = std .math .cast (u64 , offset ) orelse return seek_err ;
while (remaining > 0 ) {
remaining -= discard (&r .interface , .limited64 (remaining )) catch |err | {
r .seek_err = err ;
return err ;
};
}
r .interface .tossBuffered ();
},
.failure => return r .seek_err .?,
}
}