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{};
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 };
}
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();
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);
}
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;
}
ptr: ?*lmdb.MDB_txn = undefined,
env: Env = undefined,
- pub fn dbi(self: Txn, name: [:0]const u8) !Dbi {
+ pub fn dbi(self: Txn, name: ?[:0]const u8) !Dbi {
var result = Dbi{ .env = self.env, .txn = self };
// TODO: lmdb.MDB_INTEGERKEY?
switch (lmdb.mdb_dbi_open(self.ptr, @ptrCast(name), lmdb.MDB_CREATE, &result.ptr)) {