MORE for data reader (only a bit)
This commit is contained in:
+17
-2
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user