From 2d2278364b6186c6cdf0f0497b0498431dfe7dd1 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Tue, 21 Dec 2021 05:56:41 +0200 Subject: Initial config --- src/StringBuilder.zig | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/StringBuilder.zig (limited to 'src/StringBuilder.zig') diff --git a/src/StringBuilder.zig b/src/StringBuilder.zig new file mode 100644 index 0000000..632b1b3 --- /dev/null +++ b/src/StringBuilder.zig @@ -0,0 +1,45 @@ +const std = @import("std"); + +const Allocator = std.mem.Allocator; +const ArrayList = std.ArrayList; +const StringBuilder = @This(); + +pub const Error = std.mem.Allocator.Error; +pub const Writer = std.io.Writer(*StringBuilder, Error, writeFn); + +data: ArrayList(u8), + +pub fn init(allocator: std.mem.Allocator) StringBuilder { + return .{ + .data = ArrayList(u8).init(allocator), + }; +} + +pub fn deinit(self: StringBuilder) void { + self.data.deinit(); +} + +pub fn append(self: *StringBuilder, char: u8) Error!void { + return self.data.append(char); +} + +pub fn appendMany(self: *StringBuilder, chars: []const u8) Error!void { + return self.data.appendSlice(chars); +} + +pub fn seeSlice(self: *StringBuilder) []const u8 { + return self.data.items; +} + +pub fn toOwnedSlice(self: StringBuilder) []u8 { + return self.data.toOwnedSlice(); +} + +pub fn writer(self: *StringBuilder) Writer { + return Writer { .context = self }; +} + +fn writeFn(self: *StringBuilder, chars: []const u8) Error!usize { + try self.appendMany(chars); + return chars.len; +} -- cgit v1.2.3