Skip to documentation
SLOP

tiny.quic.cursor

Reference tiny.quic cursor

Defined in tiny.quic.

API (16)

Actions

Public operations.

Types and contracts

Public types and contracts.

No direct callersNo direct callstiny.quiccursor
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Called byCallstest sourcelib.quic.src.cursortest: bounded cursors return operatio...packetdecodeLongpacketdecodeShortprivate sourcelib.quic.src.tls.engine.extensionhasU16private sourcelib.quic.src.tls.engine.extensionoffersRawKey+5 morecursor.Readtakecursor.Readbyte
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.quic.src.cursortest: bounded cursors return operatio...test sourcelib.quic.src.cursortest: bounded cursors use the wire wi...packetdecodeLongpacketdecodeShortprivate sourcelib.quic.src.tls.engine.extensionclientKeyShare+14 morecursor.Readinit
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest sourcelib.quic.src.cursortest: bounded cursors use the wire wi...packetdecodeLongprivate sourcelib.quic.src.tls.engine.extensionclientKeyShareprivate sourcelib.quic.src.tls.engine.extensionhasU16private sourcelib.quic.src.tls.engine.extensionselectAlpn+6 morecursor.Readtakecursor.Readint
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callsprivate sourcelib.quic.src.tls.engine.extensionclientKeyShareprivate sourcelib.quic.src.tls.engine.extensionhasU16private sourcelib.quic.src.tls.engine.extensionoffersRawKeyprivate sourcelib.quic.src.tls.engine.extensionselectAlpnprivate sourcelib.quic.src.tls.engine.extensionselectedAlpn+8 morecursor.Readremaining
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callscursor.Readbytecursor.ReadintpacketdecodeShortprivate sourcelib.quic.src.tls.engine.extensionclientKeyShareprivate sourcelib.quic.src.tls.engine.extensionoffersRawKey+8 morecursor.Readtake
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest sourcelib.quic.src.cursortest: bounded cursors return operatio...private sourcelib.quic.src.transportwritePreferredAddresscursor.Writeputcursor.Writebyte
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.quic.src.cursortest: bounded cursors return operatio...test sourcelib.quic.src.cursortest: bounded cursors use the wire wi...test sourcelib.quic.src.transport.test_RFC_9000_section_182 and RFC 9221 section 3 parameters r...test sourcelib.quic.src.transport.test_RFC_9000_section_182 max UDP payload size upper boundprivate sourcelib.quic.src.transportwritePreferredAddressvarintencodecursor.Writeinit
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest sourcelib.quic.src.cursortest: bounded cursors use the wire wi...private sourcelib.quic.src.transportwritePreferredAddresscursor.Writeputcursor.Writeint
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callscursor.Writebytecursor.Writeintprivate sourcelib.quic.src.transportwritePreferredAddresscursor.Writeput
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.quic.src.cursortest: bounded cursors return operatio...test sourcelib.quic.src.cursortest: bounded cursors use the wire wi...test sourcelib.quic.src.transport.test_RFC_9000_section_182 and RFC 9221 section 3 parameters r...test sourcelib.quic.src.transport.test_RFC_9000_section_182 max UDP payload size upper boundprivate sourcelib.quic.src.transportwritePreferredAddresscursor.Writewritten
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/cursor.zig

zig
const std = @import("std");pub const ReadError = error{Truncated};pub const WriteError = error{NoSpace};pub const Read = struct {    bytes: []const u8,    index: usize,    pub fn init(bytes: []const u8) Read {        return .{ .bytes = bytes, .index = 0 };    }    pub fn remaining(self: *const Read) usize {        std.debug.assert(self.index <= self.bytes.len);        return self.bytes.len - self.index;    }    pub fn take(self: *Read, count: usize) ReadError![]const u8 {        std.debug.assert(self.index <= self.bytes.len);        if (count > self.bytes.len - self.index) return error.Truncated;        const start = self.index;        self.index += count;        std.debug.assert(self.index <= self.bytes.len);        return self.bytes[start..self.index];    }    pub fn byte(self: *Read) ReadError!u8 {        return (try self.take(1))[0];    }    pub fn int(self: *Read, comptime T: type) ReadError!T {        comptime std.debug.assert(@bitSizeOf(T) % 8 == 0);        const byte_count = @divExact(@bitSizeOf(T), 8);        const input = try self.take(byte_count);        var value: T = 0;        for (input) |part| value = (value << 8) | @as(T, part);        return value;    }    pub fn rest(self: *Read) []const u8 {        const input = self.bytes[self.index..];        self.index = self.bytes.len;        return input;    }};pub const Write = struct {    bytes: []u8,    index: usize,    pub fn init(bytes: []u8) Write {        return .{ .bytes = bytes, .index = 0 };    }    pub fn remaining(self: *const Write) usize {        std.debug.assert(self.index <= self.bytes.len);        return self.bytes.len - self.index;    }    pub fn put(self: *Write, input: []const u8) WriteError!void {        std.debug.assert(self.index <= self.bytes.len);        if (input.len > self.bytes.len - self.index) return error.NoSpace;        @memcpy(self.bytes[self.index..][0..input.len], input);        self.index += input.len;        std.debug.assert(self.index <= self.bytes.len);    }    pub fn byte(self: *Write, value: u8) WriteError!void {        try self.put(&.{value});    }    pub fn int(self: *Write, comptime T: type, value: T) WriteError!void {        comptime std.debug.assert(@bitSizeOf(T) % 8 == 0);        const byte_count = @divExact(@bitSizeOf(T), 8);        var output: [byte_count]u8 = undefined;        for (0..byte_count) |index| {            const shift = (byte_count - 1 - index) * 8;            output[index] = @truncate(value >> @intCast(shift));        }        try self.put(&output);    }    pub fn written(self: *const Write) []const u8 {        std.debug.assert(self.index <= self.bytes.len);        return self.bytes[0..self.index];    }};test "bounded cursors return operational exhaustion errors" {    var input = Read.init(&.{0xaa});    try std.testing.expectEqual(@as(u8, 0xaa), try input.byte());    try std.testing.expectError(error.Truncated, input.byte());    var bytes: [1]u8 = undefined;    var output = Write.init(&bytes);    try output.byte(0x55);    try std.testing.expectError(error.NoSpace, output.byte(0x66));    try std.testing.expectEqualSlices(u8, &.{0x55}, output.written());}test "bounded cursors use the wire width of sized integers" {    var bytes: [3]u8 = undefined;    var output = Write.init(&bytes);    try output.int(u24, 0xabcdef);    try std.testing.expectEqualSlices(u8, &.{ 0xab, 0xcd, 0xef }, output.written());    var input = Read.init(&bytes);    try std.testing.expectEqual(@as(u24, 0xabcdef), try input.int(u24));}

Source: lib/quic/src/root.zig:46

zig
pub const cursor = @import("cursor.zig");

Complete caller list for cursor.Read.byte

10 direct callers.

Complete caller list for cursor.Read.init

19 direct callers.

Complete caller list for cursor.Read.int

11 direct callers.

Complete caller list for cursor.Read.remaining

13 direct callers.

Complete caller list for cursor.Read.take

13 direct callers.

Audit

Definitions17
Public names19
Members6
Version26.7.0
Revisiondaab053ee433