Zig 0.17.0-dev (Split by item)

Shortcut keys
?
Show these tips
S
Focus search field
Esc
Clear focus & close tips
U
Jump to source code
↑
Move up in search results
↓
Move down in search results
↵
Go to active search result
This is an example of documentation generated by ZigDoc, an alternative to Zig's built-in Auto Doc feature. See also examples in other modes/formats. The project being documented here (as the example) is the Zig standard library. Private Enum

PackedPtr

Private Enum
std.Io.Dispatch.Fiber.PackedPtr
const PackedPtr = enum(@Int(.unsigned, @bitSizeOf(usize) - 2))

Like a *Fiber, but 2 bits smaller than a pointer (because the LSBs are always 0 due to alignment) so that those two bits can be used in a packed struct.

Structs

Functions

fn pack(ptr: ?*Fiber) PackedPtr
fn unpack(ptr: PackedPtr) ?*Fiber

File

Io/Dispatch.zig:238
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
    const PackedPtr = enum(@Int(.unsigned, @bitSizeOf(usize) - 2)) {
        null = 0,
        all_ones = std.math.maxInt(@Int(.unsigned, @bitSizeOf(usize) - 2)),
        _,

        const Split = packed struct(usize) { low: u2, high: PackedPtr };
        fn pack(ptr: ?*Fiber) PackedPtr {
            const split: Split = @bitCast(@intFromPtr(ptr));
            assert(split.low == 0);
            return split.high;
        }
        fn unpack(ptr: PackedPtr) ?*Fiber {
            const split: Split = .{ .low = 0, .high = ptr };
            return @ptrFromInt(@as(usize, @bitCast(split)));
        }
    }