MORE for data reader (only a bit)

This commit is contained in:
Caleb Gardner
2025-07-31 12:58:35 -05:00
parent 13f92f2e83
commit ebaacf57a3
+17 -2
View File
@@ -7,13 +7,25 @@ const FragEntry = @import("../fragment.zig").FragEntry;
const BlockSize = @import("../inode/file.zig").BlockSize;
const Compression = @import("../superblock.zig").Compression;
const CompletionMap = std.ArrayHashMap(usize, []u8);
const DataReaderError = error{
EOF,
InvalidIndex,
};
const CompletionMap = struct{
errs: std.ArrayList(anyerror),
map: std.ArrayHashMap(usize, []u8),
mut: std.Thread.Mutex = .{},
cond: std.Thread.Condition = .{},
fn init(alloc: std.mem.Allocator) CompletionMap{
return .{
.errs = .init(alloc),
.map = .init(alloc)
}
}
};
pub fn DataReader(comptime T: type) type {
return struct {
const Self = @This();
@@ -29,6 +41,8 @@ pub fn DataReader(comptime T: type) type {
frag: ?[]u8 = null,
mut: std.Thread.Mutex = .{},
pub fn init(rdr: *SfsReader(T), inode: Inode) !Self {
var sizes: []BlockSize = undefined;
var file_size: u64 = 0;
@@ -95,6 +109,7 @@ pub fn DataReader(comptime T: type) type {
write_thr.join();
if (errs.items.len > 0) return errs.items[0];
}
pub fn writeToNoBlock(self: Self, wrt: anytype, comptime finish: anytype, finish_args: anytype) !void {
comptime std.debug.assert(std.meta.hasFn(@TypeOf(wrt), "write") or std.meta.hasFn(@TypeOf(wrt), "pwrite"));
var map: CompletionMap = .init(self.alloc);