DoxigAlpha

poll

Function parameters

Parameters

#
StreamEnum:type
files:PollFiles(StreamEnum)

Type definitions in this namespace

Types

#
AnyReader
Deprecated in favor of `Reader`.
AnyWriter
Deprecated in favor of `Writer`.

Deprecated in favor of `Reader`.

Functions

#
GenericReader
Deprecated in favor of `Reader`.
GenericWriter
Deprecated in favor of `Writer`.
FixedBufferStream
Deprecated in favor of `Reader`.
fixedBufferStream
Deprecated in favor of `Reader`.
CountingReader
Deprecated with no replacement; inefficient pattern
countingReader
Deprecated with no replacement; inefficient pattern
PollFiles
Given an enum, returns a struct with fields of that enum, each field

Deprecated in favor of `Writer.Discarding`.

Values

#
null_writer
Deprecated in favor of `Writer.Discarding`.

Source

Implementation

#
pub fn poll(
    gpa: Allocator,
    comptime StreamEnum: type,
    files: PollFiles(StreamEnum),
) Poller(StreamEnum) {
    const enum_fields = @typeInfo(StreamEnum).@"enum".fields;
    var result: Poller(StreamEnum) = .{
        .gpa = gpa,
        .readers = @splat(.failing),
        .poll_fds = undefined,
        .windows = if (is_windows) .{
            .first_read_done = false,
            .overlapped = [1]windows.OVERLAPPED{
                std.mem.zeroes(windows.OVERLAPPED),
            } ** enum_fields.len,
            .small_bufs = undefined,
            .active = .{
                .count = 0,
                .handles_buf = undefined,
                .stream_map = undefined,
            },
        } else {},
    };

    inline for (enum_fields, 0..) |field, i| {
        if (is_windows) {
            result.windows.active.handles_buf[i] = @field(files, field.name).handle;
        } else {
            result.poll_fds[i] = .{
                .fd = @field(files, field.name).handle,
                .events = posix.POLL.IN,
                .revents = undefined,
            };
        }
    }

    return result;
}