tiny.simd.PhastBuildPlan
Defined in tiny.simd.
API (10)
Actions
Public operations.
Fields and members
Public fields and members.
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;Also reachable as
Complete caller list for PhastBuildPlan.inspect
10 direct callers.
tiny.simd.buildPhast[function] atlib/simd/src/phast/builder.zig:812lib.simd.src.phast.builder.expectSliceLengths[function] — private source atlib/simd/src/phast/builder.zig:835in nearest public ownerlib.simd.src.phast.buildertiny.simd.phastScratchLen[function] atlib/simd/src/phast/builder.zig:804tiny.simd.phastSeedsLen[function] atlib/simd/src/phast/builder.zig:808lib.simd.src.phast.builder.test_Highway_PHAST_64-key_table_image_matches_the_pinned_builder[function] — test source atlib/simd/src/phast/builder.zig:871in nearest public ownerlib.simd.src.phast.builderlib.simd.src.phast.builder.test_Highway_PHAST_builder_matches_a_retried_pinned_table_image[function] — test source atlib/simd/src/phast/builder.zig:958in nearest public ownerlib.simd.src.phast.builderlib.simd.src.phast.builder.test_Highway_PHAST_configuration_ordering_matches_the_pinned_builder[function] — test source atlib/simd/src/phast/builder.zig:929in nearest public ownerlib.simd.src.phast.builderlib.simd.src.phast.builder.test_Highway_PHAST_one-key_table_image_matches_the_pinned_builder[function] — test source atlib/simd/src/phast/builder.zig:849in nearest public ownerlib.simd.src.phast.builderlib.simd.src.phast.builder.test_Highway_PHAST_plan_enforces_storage_keys_and_empty_input_contracts[function] — test source atlib/simd/src/phast/builder.zig:993in nearest public ownerlib.simd.src.phast.builderlib.simd.src.phast.builder.test_Highway_PHAST_planning_rejects_unrepresentable_capacities[function] — test source atlib/simd/src/phast/builder.zig:1079in nearest public ownerlib.simd.src.phast.builder
Audit
| Definitions | 3 |
|---|---|
| Public names | 6 |
| Members | 8 |
| Version | 26.7.0 |
| Revision | daab053ee433 |