summaryrefslogtreecommitdiff
path: root/src/varint.zig
diff options
context:
space:
mode:
authorLucas Faria Mendes <lucas.oliveira1676@etec.sp.gov.br>2025-12-05 09:19:35 +0000
committerLucas Faria Mendes <lucas.oliveira1676@etec.sp.gov.br>2025-12-05 09:19:35 +0000
commitca682f9d764da0ae651f37cf06905cff36995064 (patch)
tree8b75f5150a592099104cfbd41e97fbbe82c7846c /src/varint.zig
parent339e1d1e2509375a93e7dd3dedc7e4245229b48d (diff)
downloadsqlite-zig-ca682f9d764da0ae651f37cf06905cff36995064.tar.gz
sqlite-zig-ca682f9d764da0ae651f37cf06905cff36995064.zip
codecrafters submit [skip ci]
Diffstat (limited to 'src/varint.zig')
-rw-r--r--src/varint.zig14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/varint.zig b/src/varint.zig
new file mode 100644
index 0000000..45207cf
--- /dev/null
+++ b/src/varint.zig
@@ -0,0 +1,14 @@
+const std = @import("std");
+
+pub fn parse(data: []const u8) struct { value: u64, len: usize } {
+ var result: u64 = 0;
+ var i: usize = 0;
+
+ while (i < data.len and i < 9) : (i += 1) {
+ const byte = data[i];
+ result |= @as(u64, byte & 0x7f) << @as(u6, @intCast(i * 7));
+ if ((byte & 0x80) == 0) return .{ .value = result, .len = i + 1 };
+ }
+
+ return .{ .value = result, .len = i };
+}