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 BlockSize = @import("../inode/file.zig").BlockSize;
|
||||||
const Compression = @import("../superblock.zig").Compression;
|
const Compression = @import("../superblock.zig").Compression;
|
||||||
|
|
||||||
const CompletionMap = std.ArrayHashMap(usize, []u8);
|
|
||||||
|
|
||||||
const DataReaderError = error{
|
const DataReaderError = error{
|
||||||
EOF,
|
EOF,
|
||||||
InvalidIndex,
|
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 {
|
pub fn DataReader(comptime T: type) type {
|
||||||
return struct {
|
return struct {
|
||||||
const Self = @This();
|
const Self = @This();
|
||||||
@@ -29,6 +41,8 @@ pub fn DataReader(comptime T: type) type {
|
|||||||
|
|
||||||
frag: ?[]u8 = null,
|
frag: ?[]u8 = null,
|
||||||
|
|
||||||
|
mut: std.Thread.Mutex = .{},
|
||||||
|
|
||||||
pub fn init(rdr: *SfsReader(T), inode: Inode) !Self {
|
pub fn init(rdr: *SfsReader(T), inode: Inode) !Self {
|
||||||
var sizes: []BlockSize = undefined;
|
var sizes: []BlockSize = undefined;
|
||||||
var file_size: u64 = 0;
|
var file_size: u64 = 0;
|
||||||
@@ -95,6 +109,7 @@ pub fn DataReader(comptime T: type) type {
|
|||||||
write_thr.join();
|
write_thr.join();
|
||||||
if (errs.items.len > 0) return errs.items[0];
|
if (errs.items.len > 0) return errs.items[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn writeToNoBlock(self: Self, wrt: anytype, comptime finish: anytype, finish_args: anytype) !void {
|
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"));
|
comptime std.debug.assert(std.meta.hasFn(@TypeOf(wrt), "write") or std.meta.hasFn(@TypeOf(wrt), "pwrite"));
|
||||||
var map: CompletionMap = .init(self.alloc);
|
var map: CompletionMap = .init(self.alloc);
|
||||||
|
|||||||
Reference in New Issue
Block a user