diff options
| author | Lucas Faria Mendes <lucas.oliveira1676@etec.sp.gov.br> | 2025-12-05 09:19:35 +0000 |
|---|---|---|
| committer | Lucas Faria Mendes <lucas.oliveira1676@etec.sp.gov.br> | 2025-12-05 09:19:35 +0000 |
| commit | ca682f9d764da0ae651f37cf06905cff36995064 (patch) | |
| tree | 8b75f5150a592099104cfbd41e97fbbe82c7846c /src/varint.zig | |
| parent | 339e1d1e2509375a93e7dd3dedc7e4245229b48d (diff) | |
| download | sqlite-zig-ca682f9d764da0ae651f37cf06905cff36995064.tar.gz sqlite-zig-ca682f9d764da0ae651f37cf06905cff36995064.zip | |
codecrafters submit [skip ci]
Diffstat (limited to 'src/varint.zig')
| -rw-r--r-- | src/varint.zig | 14 |
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 }; +} |