diff --git a/src/custom.zig b/src/custom.zig index 3f57a4b..2fc5a09 100644 --- a/src/custom.zig +++ b/src/custom.zig @@ -9,8 +9,7 @@ const RunBuffers = plugins.RunBuffers; pub const RandomNoise = struct { r: std.rand.DefaultPrng, - rand_buf: ?[]f32 = null, - allocator: ?*std.mem.Allocator = null, + rand_buf: ?[]f32, cnt: usize = 0, pub fn init( @@ -31,22 +30,16 @@ pub const RandomNoise = struct { return RandomNoise{ .r = r, - .allocator = allocator, .rand_buf = rand_buf, }; } else { return RandomNoise{ .r = r, + .rand_buf = null, }; } } - pub fn deinit(self: *RandomNoise) void { - if (self.allocator == null) return; - if (self.rand_buf == null) return; - self.allocator.?.free(self.rand_buf.?); - } - pub fn run(self: *RandomNoise, bufs: *RunBuffers) void { if (self.rand_buf) |rand_buf| { if (self.cnt >= rand_buf.len) self.cnt = 0; @@ -60,8 +53,7 @@ pub const RandomNoise = struct { pub const WildNoise = struct { r: std.rand.DefaultPrng, - rand_buf: ?[]f32 = null, - allocator: ?*std.mem.Allocator = null, + rand_buf: ?[]f32, cnt: usize = 0, pub fn init( @@ -87,16 +79,11 @@ pub const WildNoise = struct { } else { return WildNoise{ .r = r, + .rand_buf = null, }; } } - pub fn deinit(self: *WildNoise) void { - if (self.allocator == null) return; - if (self.rand_buf == null) return; - self.allocator.?.free(self.rand_buf.?); - } - pub fn run(self: *WildNoise, bufs: *RunBuffers) void { if (self.rand_buf) |rand_buf| { if (self.cnt >= rand_buf.len) self.cnt = 0; @@ -120,13 +107,12 @@ pub const Write = struct { params: *plugins.ParamMap, ) Write { const data = params.get("data").?; + return Write{ .data = data.value, }; } - pub fn deinit(self: *Write) void {} - pub fn run(self: *Write, bufs: *RunBuffers) void { bufs.out[0] = self.data; } diff --git a/src/image.zig b/src/image.zig index 16e682f..1898f28 100644 --- a/src/image.zig +++ b/src/image.zig @@ -69,7 +69,6 @@ fn sf_tell(file: *c.SNDFILE) i64 { return -frames; } -/// Caller owns the returned memory. pub fn temporaryName(allocator: *std.mem.Allocator) ![]u8 { const template_start = "/temp/temp_"; const template = "/tmp/temp_XXXXXXXXXXX"; @@ -285,7 +284,7 @@ pub const Image = struct { idx, param.value, ); - (&ports[idx]).value = param.value; + ports[idx].value = param.value; } // now we need to generate a temporary file and put the output of @@ -376,7 +375,6 @@ pub const Image = struct { } var plugin = plugin_opt.?; - defer plugin.deinit(); // the code here is a copypaste of runPlugin() without the specific // lilv things. diff --git a/src/lang.zig b/src/lang.zig index 2952525..1007cf8 100644 --- a/src/lang.zig +++ b/src/lang.zig @@ -332,7 +332,7 @@ pub const Lang = struct { stmt = std.mem.trimLeft(u8, stmt, "\n"); if (stmt.len == 0) continue; - if (std.mem.startsWith(u8, stmt, "#")) continue; + if (stmt[0] == '#') continue; // TODO better tokenizer instead of just tokenize(" "); var tok_it = std.mem.tokenize(stmt, " "); diff --git a/src/lv2_helpers.zig b/src/lv2_helpers.zig index d9a89f5..50f99a1 100644 --- a/src/lv2_helpers.zig +++ b/src/lv2_helpers.zig @@ -59,14 +59,14 @@ pub const Port = struct { /// Setup ports for a given plugin. Gives an array to pointers of Port structs. /// This setup is required so we link the plugin to the ports later on, and /// also link our buffers, and control values. -pub fn setupPorts(ctx: *plugin.Context) ![]Port { +pub fn setupPorts(ctx: *plugin.Context) ![]*Port { var world = ctx.world; const n_ports: u32 = c.lilv_plugin_get_num_ports(ctx.plugin); - var ports = try ctx.allocator.alloc(Port, n_ports); + var ports = try ctx.allocator.alloc(*Port, n_ports); - for (ports) |_, idx| { - var port: *Port = &ports[idx]; + for (ports) |port_ptr, idx| { + var port = try ctx.allocator.create(Port); port.* = Port{ .lilv_port = null, .ptype = .Control, @@ -75,6 +75,8 @@ pub fn setupPorts(ctx: *plugin.Context) ![]Port { .is_input = false, .optional = false, }; + + ports[idx] = port; } var values: []f32 = try ctx.allocator.alloc(f32, n_ports); @@ -98,7 +100,7 @@ pub fn setupPorts(ctx: *plugin.Context) ![]Port { var i: u32 = 0; while (i < n_ports) : (i += 1) { - var port: *Port = &ports[i]; + var port: *Port = ports[i]; const lport = c.lilv_plugin_get_port_by_index(ctx.plugin, i).?; diff --git a/src/main.zig b/src/main.zig index 156855e..9296189 100644 --- a/src/main.zig +++ b/src/main.zig @@ -8,7 +8,10 @@ test "scritcher" { } pub fn main() !void { - const allocator = std.heap.direct_allocator; + var arena = std.heap.ArenaAllocator.init(std.heap.c_allocator); + defer arena.deinit(); + + const allocator = &arena.allocator; var lang = langs.Lang.init(allocator); defer lang.deinit(); @@ -18,7 +21,9 @@ pub fn main() !void { var args_it = std.process.args(); - _ = try (args_it.next(allocator) orelse @panic("expected exe name")); + const exe_name = try (args_it.next(allocator) orelse @panic("expected exe name")); + + // args[1] is the path to scri file const scri_path = try (args_it.next(allocator) orelse @panic("expected scri path")); var file = try std.fs.File.openRead(scri_path); diff --git a/src/plugin.zig b/src/plugin.zig index daf8023..c403eb7 100644 --- a/src/plugin.zig +++ b/src/plugin.zig @@ -112,16 +112,15 @@ pub const RunContext = struct { self.buffers.deinit(); } - pub fn connectPorts(self: *RunContext, ports: []lv2.Port) void { + pub fn connectPorts(self: *RunContext, ports: []*lv2.Port) void { var i: usize = 0; var o: usize = 0; var in_buf = self.buffers.in; var out_buf = self.buffers.out; - for (ports) |_, p_idx| { + for (ports) |port, p_idx| { var p = @intCast(u32, p_idx); - var port: *lv2.Port = &ports[p_idx]; switch (port.ptype) { .Control => lv2.lilv_instance_connect_port(self.instance, p, &port.value), @@ -142,7 +141,6 @@ pub const RunContext = struct { pub fn makeContext(allocator: *std.mem.Allocator, plugin_uri: []const u8) !Context { const cstr_plugin_uri = try std.cstr.addNullByte(allocator, plugin_uri); - defer allocator.free(cstr_plugin_uri); var world: *c.LilvWorld = c.lilv_world_new().?; errdefer c.lilv_world_free(world); diff --git a/src/runner.zig b/src/runner.zig index 625c1f1..f3d617c 100644 --- a/src/runner.zig +++ b/src/runner.zig @@ -115,7 +115,6 @@ pub const Runner = struct { "{}_g", basename[0..period_idx], ); - defer self.allocator.free(starts_with); var max: usize = 0; @@ -329,8 +328,6 @@ pub const Runner = struct { .Mbeq => blk: { const pos = try cmd.consumePosition(); const bands = try cmd.floatArgMany(self.allocator, 2, 15, f32(0)); - defer self.allocator.free(bands); - try self.mbeqCmd(pos, bands); },