aboutsummaryrefslogtreecommitdiff
path: root/common.zig
diff options
context:
space:
mode:
Diffstat (limited to 'common.zig')
-rw-r--r--common.zig46
1 files changed, 46 insertions, 0 deletions
diff --git a/common.zig b/common.zig
new file mode 100644
index 0000000..f724940
--- /dev/null
+++ b/common.zig
@@ -0,0 +1,46 @@
+const std = @import("std");
+
+pub const Setup = struct {
+ pub const Part = enum { pt1, pt2 };
+
+ gpa: std.heap.GeneralPurposeAllocator(.{}),
+ a: std.mem.Allocator,
+ input: []const u8,
+ part: Part,
+
+ pub fn get() !Setup {
+ var res: Setup = undefined;
+ res.gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ res.a = res.gpa.allocator();
+ var p = std.process.args();
+ var file: []const u8 = "";
+ if (!p.skip()) return error.NoProgramName;
+ if (p.next()) |pp| {
+ if (std.mem.eql(u8, pp, "pt1")) {
+ res.part = .pt1;
+ } else if (std.mem.eql(u8, pp, "pt2")) {
+ res.part = .pt2;
+ } else {
+ return error.BadPartSpecified;
+ }
+ } else {
+ return error.NoPartSpecified;
+ }
+ if (p.next()) |pp| {
+ file = pp;
+ } else {
+ return error.NoPartSpecified;
+ }
+
+ var f = try std.fs.cwd().openFile(file, .{});
+ defer f.close();
+ var c = try f.readToEndAlloc(res.a, std.math.maxInt(u32));
+ res.input = c;
+ return res;
+ }
+ pub fn deinit(self: *Setup) void {
+ _ = self;
+ //self.a.free(self.input); // For some reason this is freezing
+ //_ = self.gpa.deinit(); // and if we don't free, then gpa.deinit whinges that we leaked memory :)
+ }
+};