summaryrefslogtreecommitdiff
path: root/src/StringBuilder.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/StringBuilder.zig')
-rw-r--r--src/StringBuilder.zig45
1 files changed, 45 insertions, 0 deletions
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 @@
1const std = @import("std");
2
3const Allocator = std.mem.Allocator;
4const ArrayList = std.ArrayList;
5const StringBuilder = @This();
6
7pub const Error = std.mem.Allocator.Error;
8pub const Writer = std.io.Writer(*StringBuilder, Error, writeFn);
9
10data: ArrayList(u8),
11
12pub fn init(allocator: std.mem.Allocator) StringBuilder {
13 return .{
14 .data = ArrayList(u8).init(allocator),
15 };
16}
17
18pub fn deinit(self: StringBuilder) void {
19 self.data.deinit();
20}
21
22pub fn append(self: *StringBuilder, char: u8) Error!void {
23 return self.data.append(char);
24}
25
26pub fn appendMany(self: *StringBuilder, chars: []const u8) Error!void {
27 return self.data.appendSlice(chars);
28}
29
30pub fn seeSlice(self: *StringBuilder) []const u8 {
31 return self.data.items;
32}
33
34pub fn toOwnedSlice(self: StringBuilder) []u8 {
35 return self.data.toOwnedSlice();
36}
37
38pub fn writer(self: *StringBuilder) Writer {
39 return Writer { .context = self };
40}
41
42fn writeFn(self: *StringBuilder, chars: []const u8) Error!usize {
43 try self.appendMany(chars);
44 return chars.len;
45}