2019-03-03 05:46:04 +08:00
|
|
|
const std = @import("../std.zig");
|
2018-12-03 07:35:41 +08:00
|
|
|
const InStream = std.io.InStream;
|
|
|
|
|
|
|
|
pub fn SeekableStream(comptime SeekErrorType: type, comptime GetSeekPosErrorType: type) type {
|
|
|
|
return struct {
|
|
|
|
const Self = @This();
|
|
|
|
pub const SeekError = SeekErrorType;
|
|
|
|
pub const GetSeekPosError = GetSeekPosErrorType;
|
|
|
|
|
2019-04-28 23:06:20 +08:00
|
|
|
seekToFn: fn (self: *Self, pos: u64) SeekError!void,
|
|
|
|
seekForwardFn: fn (self: *Self, pos: i64) SeekError!void,
|
2018-12-03 07:35:41 +08:00
|
|
|
|
2019-04-28 23:06:20 +08:00
|
|
|
getPosFn: fn (self: *Self) GetSeekPosError!u64,
|
|
|
|
getEndPosFn: fn (self: *Self) GetSeekPosError!u64,
|
2018-12-03 07:35:41 +08:00
|
|
|
|
2019-04-28 23:06:20 +08:00
|
|
|
pub fn seekTo(self: *Self, pos: u64) SeekError!void {
|
2018-12-03 07:35:41 +08:00
|
|
|
return self.seekToFn(self, pos);
|
|
|
|
}
|
|
|
|
|
2019-04-28 23:06:20 +08:00
|
|
|
pub fn seekForward(self: *Self, amt: i64) SeekError!void {
|
2018-12-03 07:35:41 +08:00
|
|
|
return self.seekForwardFn(self, amt);
|
|
|
|
}
|
|
|
|
|
2019-04-28 23:06:20 +08:00
|
|
|
pub fn getEndPos(self: *Self) GetSeekPosError!u64 {
|
2018-12-03 07:35:41 +08:00
|
|
|
return self.getEndPosFn(self);
|
|
|
|
}
|
|
|
|
|
2019-04-28 23:06:20 +08:00
|
|
|
pub fn getPos(self: *Self) GetSeekPosError!u64 {
|
2018-12-03 07:35:41 +08:00
|
|
|
return self.getPosFn(self);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|