Skip to documentation
SLOP

tiny.simd.PhastBuildPlan

Reference tiny.simd PhastBuildPlan

Defined in tiny.simd.

API (10)

Actions

Public operations.

Fields and members

Public fields and members.

No direct callersNo direct callstiny.simdPhastBuildPlan
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Source: lib/simd/src/phast/builder.zig:29

zig
pub const Plan = struct {    num_keys: usize,    payload_bytes: usize,    configs: [max_config_count]family.Config,    config_count: usize,    max_num_slots: usize,    max_num_buckets: usize,    scratch_len: usize,    seeds_len: usize,    const Self = @This();    pub fn inspect(num_keys: usize, payload_bytes: usize) family.PhastError!Self {        if (num_keys == 0) {            return .{                .num_keys = 0,                .payload_bytes = payload_bytes,                .configs = @splat(.{}),                .config_count = 0,                .max_num_slots = 0,                .max_num_buckets = 0,                .scratch_len = 0,                .seeds_len = 0,            };        }        if (num_keys > std.math.maxInt(u32)) return error.CapacityExceeded;        var configs: [max_config_count]family.Config = @splat(.{});        const config_count = try enumerateConfigs(num_keys, configs[0..]);        var max_num_slots: usize = 0;        var max_num_buckets: usize = 0;        for (configs[0..config_count]) |config| {            _ = try config.allocatedBytes(payload_bytes);            max_num_slots = @max(max_num_slots, config.num_slots);            max_num_buckets = @max(max_num_buckets, config.numBuckets());        }        sortConfigs(configs[0..config_count], payload_bytes);        return .{            .num_keys = num_keys,            .payload_bytes = payload_bytes,            .configs = configs,            .config_count = config_count,            .max_num_slots = max_num_slots,            .max_num_buckets = max_num_buckets,            .scratch_len = try scratchLength(num_keys, max_num_slots, max_num_buckets),            .seeds_len = family.seedWordLength(max_num_buckets),        };    }    pub fn build(        self: Self,        scratch: []u32,        seed_words: []u32,        keys: []const u32,    ) family.PhastError!family.Data {        try self.validateBuffers(scratch, seed_words, keys);        if (self.num_keys == 0) return .{};        var builder = try Builder.init(self, scratch, seed_words);        try builder.validateDistinct(keys);        const engine = random.AesCtrEngine.initDeterministic();        for (self.configs[0..self.config_count], 0..) |config, config_index| {            for (0..max_attempts) |attempt_index| {                const stream = @as(u64, config.hash_key) + attempt_index;                const hash_key: u32 = @truncate(engine.generate(stream, 0));                if (!builder.maybeBuild(keys, config, hash_key)) continue;                return builder.take(config_index, attempt_index);            }        }        @memset(seed_words[0..self.seeds_len], 0);        return error.BuildFailed;    }    fn validateBuffers(        self: Self,        scratch: []u32,        seed_words: []u32,        keys: []const u32,    ) family.PhastError!void {        if (keys.len != self.num_keys) return error.PlanMismatch;        if (scratch.len < self.scratch_len) return error.ScratchTooSmall;        if (seed_words.len < self.seeds_len) return error.SeedsTooSmall;        if (storageOverlaps(u32, scratch, u32, seed_words) or            storageOverlaps(u32, scratch, u32, keys) or            storageOverlaps(u32, seed_words, u32, keys))        {            return error.InputOutputOverlap;        }    }};

Source: lib/simd/src/root.zig:585

zig
pub const PhastBuildPlan = phast.PhastBuildPlan;
Called byCallsNo direct callersprivate sourcelib.simd.src.phast.builder.Builderinitprivate sourcelib.simd.src.phast.builder.BuildermaybeBuildprivate sourcelib.simd.src.phast.builder.Buildertakeprivate sourcelib.simd.src.phast.builder.BuildervalidateDistinctprivate sourcelib.simd.src.phast.builder.PlanvalidateBuffersAesCtrEngineinitDeterministicPhastBuildPlanbuild
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallstiny.simdbuildPhastprivate sourcelib.simd.src.phast.builderexpectSliceLengthstiny.simdphastScratchLentiny.simdphastSeedsLentest sourcelib.simd.src.phast.buildertest: Highway PHAST 64-key table imag...+5 moreprivate sourcelib.simd.src.phast.builderenumerateConfigsprivate sourcelib.simd.src.phast.builderscratchLengthprivate sourcelib.simd.src.phast.buildersortConfigsprivate sourcelib.simd.src.phast.familyseedWordLengthPhastBuildPlaninspect
Static calls · unresolved targets: 0 · external targets: 2.

Also reachable as

phast.PhastBuildPlan.

Complete caller list for PhastBuildPlan.inspect

10 direct callers.

Audit

Definitions3
Public names6
Members8
Version26.7.0
Revisiondaab053ee433