Function takeStructPointer [src]
Obtains an unaligned pointer to the beginning of the stream, reinterpreted
as a pointer to the provided type, advancing the seek position.
Asserts the buffer was initialized with a capacity at least @sizeOf(T).
See also:
peekStructPointer
takeStruct
Prototype
pub fn takeStructPointer(r: *Reader, comptime T: type) Error!*align(1) T Parameters
r: *ReaderT: type Possible Errors
See the Reader implementation for detailed diagnostics.
Example
test takeStructPointer {
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.takeStructPointer(S)).*),
.big => try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x3456 }), (try r.takeStructPointer(S)).*),
}
try testing.expectError(error.EndOfStream, r.takeStructPointer(S));
} Source
pub fn takeStructPointer(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.takeArray(@sizeOf(T)));
}