X-Git-Url: https://gitweb.ps.run/ziglmdb/blobdiff_plain/8a83e6882df4994d1e32d7c633dd4e14e937d9a5..364d2904bd4c9928a08b9e083fa2d3251d6cf836:/src/db.zig diff --git a/src/db.zig b/src/db.zig index 4e8126d..3e1b186 100644 --- a/src/db.zig +++ b/src/db.zig @@ -96,7 +96,7 @@ fn SetListBase(comptime K: type, comptime V: type) type { idx: ?Index = null, fn open_dbi(txn: lmdb.Txn) !lmdb.Dbi { - return try txn.dbi("SetList"); + return try txn.dbi(null); } pub fn init(txn: lmdb.Txn) !Self { const head = View.Head{}; @@ -144,6 +144,15 @@ fn SetListViewBase(comptime K: type, comptime V: type) type { idx: SetListBase(K, V).Index, head: Head, + fn gen(self: @This()) !Key { + // TODO: limit loop + while (true) { + const key = try Prng.gen(self.dbi, Key); + if (!try self.dbi.has(self.item_idx(key))) { + return key; + } + } + } fn item_idx(self: Self, k: K) ItemIndex { return .{ self.idx, k }; } @@ -171,7 +180,7 @@ fn SetListViewBase(comptime K: type, comptime V: type) type { try self.item_put(item.next.?, next); } - if (self.head.first == k) self.head.first = item.next; + if (std.mem.eql(K, self.head.first, k)) self.head.first = item.next; if (self.head.last == k) self.head.last = item.prev; self.head.len -= 1; try self.head_update(); @@ -312,15 +321,6 @@ pub fn List(comptime V: type) type { base: ViewBase, - fn gen(self: @This()) !Key { - // TODO: limit loop - while (true) { - const key = try Prng.gen(self.base.dbi, Key); - if (!try self.base.dbi.has(self.base.item_idx(key))) { - return key; - } - } - } pub fn del(self: *@This(), key: Key) !void { try self.base.del(key); } @@ -331,7 +331,7 @@ pub fn List(comptime V: type) type { return self.base.len(); } pub fn append(self: *@This(), val: Val) !Key { - const key = try self.gen(); + const key = try self.base.gen(); try self.base.append(key, val); return key; }