Moved to File.MemoryMap instead of direct file I/O
This commit is contained in:
+15
-12
@@ -3,22 +3,25 @@
|
||||
const std = @import("std");
|
||||
const Io = std.Io;
|
||||
const File = Io.File;
|
||||
const Reader = File.Reader;
|
||||
const Reader = Io.Reader;
|
||||
|
||||
const OffsetFile = @This();
|
||||
|
||||
fil: File,
|
||||
offset: u64,
|
||||
map: Io.File.MemoryMap,
|
||||
|
||||
pub fn init(fil: File, init_offset: u64) OffsetFile {
|
||||
return .{ .fil = fil, .offset = init_offset };
|
||||
pub fn init(io: Io, fil: File, archive_size: u64, init_offset: u64) !OffsetFile {
|
||||
return .{
|
||||
.map = try fil.createMemoryMap(io, .{
|
||||
.protection = .{ .read = true, .write = false, .execute = false },
|
||||
.len = archive_size,
|
||||
.offset = init_offset,
|
||||
}),
|
||||
};
|
||||
}
|
||||
pub fn deinit(self: @This(), io: Io) void {
|
||||
self.map.destroy(io);
|
||||
}
|
||||
|
||||
pub fn readerAt(self: OffsetFile, io: Io, offset: u64, buffer: []u8) Reader.SeekError!Reader {
|
||||
var rdr = self.fil.reader(io, buffer);
|
||||
try rdr.seekTo(self.offset + offset);
|
||||
return rdr;
|
||||
}
|
||||
pub fn readAt(self: OffsetFile, io: Io, offset: u64, buf: []u8) File.ReadPositionalError!void {
|
||||
_ = try self.fil.readPositionalAll(io, buf, self.offset + offset);
|
||||
pub fn readerAt(self: OffsetFile, offset: u64) Reader {
|
||||
return .fixed(self.map.memory[offset..]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user