summaryrefslogtreecommitdiff
path: root/src/StringBuilder.zig
diff options
context:
space:
mode:
authorGravatar Uko Kokņevičs2021-12-21 05:56:41 +0200
committerGravatar Uko Kokņevičs2021-12-21 05:56:41 +0200
commit2d2278364b6186c6cdf0f0497b0498431dfe7dd1 (patch)
tree8f2329afbc90817c855f5c5154a547a58a9458aa /src/StringBuilder.zig
downloades-2d2278364b6186c6cdf0f0497b0498431dfe7dd1.tar.gz
es-2d2278364b6186c6cdf0f0497b0498431dfe7dd1.tar.xz
es-2d2278364b6186c6cdf0f0497b0498431dfe7dd1.zip
Initial config
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}