Function peekStructPointer [src]
Obtains an unaligned pointer to the beginning of the stream, reinterpreted
as a pointer to the provided type, without advancing the seek position.
Asserts the buffer was initialized with a capacity at least @sizeOf(T).
See also:
takeStructPointer
peekStruct
Prototype
pub fn peekStructPointer(r: *Reader, comptime T: type) Error!*align(1) T
Parameters
r: *Reader
T: type
Possible Errors
See the Reader
implementation for detailed diagnostics.
Example
test peekStructPointer {
var r: Reader = .fixed(&.{ 0x12, 0x00, 0x34, 0x56 });
const S = extern struct { a: u8, b: u16 };
switch (native_endian) {
.little => {
try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x5634 }), (try r.peekStructPointer(S)).*);
try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x5634 }), (try r.peekStructPointer(S)).*);
},
.big => {
try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x3456 }), (try r.peekStructPointer(S)).*);
try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x3456 }), (try r.peekStructPointer(S)).*);
},
}
}
Source
pub fn peekStructPointer(r: *Reader, comptime T: type) Error!*align(1) T {
// Only extern and packed structs have defined in-memory layout.
comptime assert(@typeInfo(T).@"struct".layout != .auto);
return @ptrCast(try r.peekArray(@sizeOf(T)));
}