From 0afa2d040a6f51b5423269cb588f4fa483e8cfba Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Thu, 2 May 2019 00:58:26 -0700 Subject: [PATCH] make std.HashMap.ensureCapacity round up to the nearest power of two --- std/hash_map.zig | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/std/hash_map.zig b/std/hash_map.zig index aae31063e5..c8fbd58065 100644 --- a/std/hash_map.zig +++ b/std/hash_map.zig @@ -141,8 +141,15 @@ pub fn HashMap(comptime K: type, comptime V: type, comptime hash: fn (key: K) u3 if (new_capacity <= self.entries.len) { return; } + // make sure capacity is a power of two + var capacity = new_capacity; + const is_power_of_two = capacity & (capacity-1) == 0; + if (!is_power_of_two) { + const pow = math.log2_int_ceil(usize, capacity); + capacity = math.pow(usize, 2, pow); + } const old_entries = self.entries; - try self.initCapacity(new_capacity); + try self.initCapacity(capacity); if (old_entries.len > 0) { // dump all of the old elements into the new table for (old_entries) |*old_entry| {