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

EndOfStream
ReadFailed

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))); }