web: Update UUID code to zig 0.16.0
This commit is contained in:
@@ -5,9 +5,10 @@ bytes: [16]u8,
|
|||||||
|
|
||||||
pub const zero: UUID = .{ .bytes = @splat(0) };
|
pub const zero: UUID = .{ .bytes = @splat(0) };
|
||||||
|
|
||||||
pub fn v4() UUID {
|
pub fn v4(io: std.Io) UUID {
|
||||||
var bytes: [16]u8 = undefined;
|
var bytes: [16]u8 = undefined;
|
||||||
std.crypto.random.bytes(&bytes);
|
|
||||||
|
io.random(&bytes);
|
||||||
bytes[6] = (bytes[6] & 0x0F) | 0x40;
|
bytes[6] = (bytes[6] & 0x0F) | 0x40;
|
||||||
bytes[8] = (bytes[8] & 0x3F) | 0x80;
|
bytes[8] = (bytes[8] & 0x3F) | 0x80;
|
||||||
return .{ .bytes = bytes };
|
return .{ .bytes = bytes };
|
||||||
@@ -35,7 +36,7 @@ pub const namespaces = struct {
|
|||||||
pub fn v5(namespace: UUID, name: []const u8) UUID {
|
pub fn v5(namespace: UUID, name: []const u8) UUID {
|
||||||
const hash = blk: {
|
const hash = blk: {
|
||||||
var hasher = std.crypto.hash.Sha1.init(.{});
|
var hasher = std.crypto.hash.Sha1.init(.{});
|
||||||
hasher.update(namespace);
|
hasher.update(namespace.bytes);
|
||||||
hasher.update(name);
|
hasher.update(name);
|
||||||
break :blk hasher.finalResult();
|
break :blk hasher.finalResult();
|
||||||
};
|
};
|
||||||
@@ -47,13 +48,13 @@ pub fn v5(namespace: UUID, name: []const u8) UUID {
|
|||||||
return .{ .bytes = bytes };
|
return .{ .bytes = bytes };
|
||||||
}
|
}
|
||||||
|
|
||||||
var v7_lock: std.Thread.Mutex = .{};
|
var v7_lock: std.Io.Mutex = .init;
|
||||||
var v7_last_timestamp: std.atomic.Value(u64) = .{ .raw = 0 };
|
var v7_last_timestamp: std.atomic.Value(u64) = .init(0);
|
||||||
var v7_counter: std.atomic.Value(u32) = .{ .raw = 0 };
|
var v7_counter: std.atomic.Value(u32) = .init(0);
|
||||||
|
|
||||||
fn getCount(timestamp: u64) u32 {
|
fn getCount(io: std.Io, timestamp: u64) u32 {
|
||||||
v7_lock.lock();
|
v7_lock.lockUncancelable(io);
|
||||||
defer v7_lock.unlock();
|
defer v7_lock.unlock(io);
|
||||||
|
|
||||||
if (v7_last_timestamp.swap(timestamp, .monotonic) != timestamp) {
|
if (v7_last_timestamp.swap(timestamp, .monotonic) != timestamp) {
|
||||||
v7_counter.store(0, .monotonic);
|
v7_counter.store(0, .monotonic);
|
||||||
@@ -62,12 +63,12 @@ fn getCount(timestamp: u64) u32 {
|
|||||||
return v7_counter.fetchAdd(1, .monotonic) % 4096;
|
return v7_counter.fetchAdd(1, .monotonic) % 4096;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn v7() UUID {
|
pub fn v7(io: std.Io) UUID {
|
||||||
const timestamp: u64 = @intCast(@max(0, std.time.milliTimestamp()));
|
const timestamp: u64 = @intCast(@max(0, std.time.milliTimestamp()));
|
||||||
const count = getCount(timestamp);
|
const count = getCount(timestamp);
|
||||||
const random = blk: {
|
const random = blk: {
|
||||||
var bytes: [8]u8 = undefined;
|
var bytes: [8]u8 = undefined;
|
||||||
std.crypto.random.bytes(&bytes);
|
io.random(&bytes);
|
||||||
break :blk bytes;
|
break :blk bytes;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user