Resetting. Again.

Getting the basics re-added
This commit is contained in:
Caleb J. Gardner
2026-06-09 22:23:54 -05:00
parent 4b2b7021c7
commit 5c04933520
41 changed files with 699 additions and 2862 deletions
+28 -19
View File
@@ -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);
}