pub fn hash(self: @This(), s: []const u8) u32 self: @This()s: []const u8109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 pub fn hash(self: @This(), s: []const u8) u32 {
_ = self;
switch (native_os) {
else => return std.array_hash_map.hashString(s),
.windows => {
var h = std.hash.Wyhash.init(0);
var it = unicode.Wtf8View.initUnchecked(s).iterator();
while (it.nextCodepoint()) |cp| {
const cp_upper = if (std.math.cast(u16, cp)) |wtf16|
std.os.windows.toUpperWtf16(wtf16)
else
cp;
h.update(&[_]u8{
@truncate(cp_upper >> 0),
@truncate(cp_upper >> 8),
@truncate(cp_upper >> 16),
});
}
return @truncate(h.final());
},
}
}