Resetting. Again.
Getting the basics re-added
This commit is contained in:
+28
-19
@@ -1,25 +1,34 @@
|
||||
const std = @import("std");
|
||||
const build = @import("build_options");
|
||||
|
||||
const Decompressor = @This();
|
||||
const c = @import("c_decomp.zig");
|
||||
const zig = @import("zig_decomp.zig");
|
||||
|
||||
pub fn getFn(e: Enum) !Fn {
|
||||
return switch (e) {
|
||||
.gzip => if (build.use_zig_decomp) zig.gzip else c.gzip,
|
||||
.lzma => if (build.use_zig_decomp) zig.lzma else c.lzma,
|
||||
.lzo => if (build.use_zig_decomp or !build.allow_lzo) error.LzoUnsupported else c.lzo,
|
||||
.xz => if (build.use_zig_decomp) zig.xz else c.xz,
|
||||
.lz4 => if (build.use_zig_decomp) error.Lz4Unsupported else c.lz4,
|
||||
.zstd => if (build.use_zig_decomp) zig.zstd else c.zstd,
|
||||
};
|
||||
}
|
||||
|
||||
// Types
|
||||
|
||||
pub const Fn = *fn (std.mem.Allocator, in: []u8, out: []u8) Error!usize;
|
||||
|
||||
pub const Enum = enum(u16) {
|
||||
gzip = 1,
|
||||
lzma,
|
||||
lzo,
|
||||
xz,
|
||||
lz4,
|
||||
zstd,
|
||||
};
|
||||
|
||||
pub const Error = error{
|
||||
OutOfMemory,
|
||||
BadInput,
|
||||
OutputTooSmall,
|
||||
ReadFailed,
|
||||
WriteFailed,
|
||||
EndOfStream,
|
||||
DecompressionFailed,
|
||||
};
|
||||
|
||||
vtable: *const struct {
|
||||
decompress: *const fn (*Decompressor, []u8, []u8) Error!usize = DefaultDecompress,
|
||||
stateless: *const fn (std.mem.Allocator, []u8, []u8) Error!usize,
|
||||
},
|
||||
|
||||
pub fn decompress(self: *Decompressor, in: []u8, out: []u8) Error!usize {
|
||||
return self.vtable.decompress(self, in, out);
|
||||
}
|
||||
|
||||
fn DefaultDecompress(self: *Decompressor, in: []u8, out: []u8) Error!usize {
|
||||
return self.vtable.stateless(std.heap.smp_allocator, in, out);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user