treesummaryrefslogcommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/c.h1
-rw-r--r--src/lmdb.zig190
2 files changed, 97 insertions, 94 deletions
diff --git a/src/c.h b/src/c.h
new file mode 100644
index 0000000..381f26c
--- /dev/null
+++ b/src/c.h
@@ -0,0 +1 @@
+#include <lmdb.h>
diff --git a/src/lmdb.zig b/src/lmdb.zig
index b7d97ea..39a50f2 100644
--- a/src/lmdb.zig
+++ b/src/lmdb.zig
@@ -1,46 +1,46 @@
const std = @import("std");
-const lmdb = @cImport(@cInclude("lmdb.h"));
+const c = @import("c");
pub const Cursor = struct {
const Self = @This();
pub const Flags = enum(c_uint) {
- First = lmdb.MDB_FIRST,
- FirstDup = lmdb.MDB_FIRST_DUP,
- GetBoth = lmdb.MDB_GET_BOTH,
- GetBothRange = lmdb.MDB_GET_BOTH_RANGE,
- GetCurrent = lmdb.MDB_GET_CURRENT,
- GetMultiple = lmdb.MDB_GET_MULTIPLE,
- Last = lmdb.MDB_LAST,
- LastDup = lmdb.MDB_LAST_DUP,
- Next = lmdb.MDB_NEXT,
- NextDup = lmdb.MDB_NEXT_DUP,
- NextMultiple = lmdb.MDB_NEXT_MULTIPLE,
- NextNodup = lmdb.MDB_NEXT_NODUP,
- Prev = lmdb.MDB_PREV,
- PrevDup = lmdb.MDB_PREV_DUP,
- PrevNodup = lmdb.MDB_PREV_NODUP,
- Set = lmdb.MDB_SET,
- SetKey = lmdb.MDB_SET_KEY,
- SetRange = lmdb.MDB_SET_RANGE,
+ First = c.MDB_FIRST,
+ FirstDup = c.MDB_FIRST_DUP,
+ GetBoth = c.MDB_GET_BOTH,
+ GetBothRange = c.MDB_GET_BOTH_RANGE,
+ GetCurrent = c.MDB_GET_CURRENT,
+ GetMultiple = c.MDB_GET_MULTIPLE,
+ Last = c.MDB_LAST,
+ LastDup = c.MDB_LAST_DUP,
+ Next = c.MDB_NEXT,
+ NextDup = c.MDB_NEXT_DUP,
+ NextMultiple = c.MDB_NEXT_MULTIPLE,
+ NextNodup = c.MDB_NEXT_NODUP,
+ Prev = c.MDB_PREV,
+ PrevDup = c.MDB_PREV_DUP,
+ PrevNodup = c.MDB_PREV_NODUP,
+ Set = c.MDB_SET,
+ SetKey = c.MDB_SET_KEY,
+ SetRange = c.MDB_SET_RANGE,
};
- ptr: ?*lmdb.MDB_cursor = undefined,
+ ptr: ?*c.MDB_cursor = undefined,
pub fn close(self: Self) void {
- lmdb.mdb_cursor_close(self.ptr);
+ c.mdb_cursor_close(self.ptr);
}
pub fn put(self: Self, k: anytype, v: anytype) !void {
- var key = lmdb.MDB_val{
+ var key = c.MDB_val{
.mv_size = @sizeOf(@TypeOf(k)),
- .mv_data = @constCast(@ptrCast(&k)),
+ .mv_data = @ptrCast(@constCast(&k)),
};
- var val = lmdb.MDB_val{
+ var val = c.MDB_val{
.mv_size = @sizeOf(@TypeOf(v)),
- .mv_data = @constCast(@ptrCast(&v)),
+ .mv_data = @ptrCast(@constCast(&v)),
};
- switch (lmdb.mdb_cursor_put(self.ptr, &key, &val, 0)) {
+ switch (c.mdb_cursor_put(self.ptr, &key, &val, 0)) {
0 => {},
else => |err| {
_ = err;
@@ -53,18 +53,18 @@ pub const Cursor = struct {
const k_ti = @typeInfo(@TypeOf(k));
const K = k_ti.pointer.child;
- var key = lmdb.MDB_val{
+ var key = c.MDB_val{
.mv_size = @sizeOf(K),
- .mv_data = @constCast(@ptrCast(k)),
+ .mv_data = @ptrCast(@constCast(k)),
};
- var val: lmdb.MDB_val = undefined;
- return switch (lmdb.mdb_cursor_get(self.ptr, &key, &val, @intFromEnum(flags))) {
+ var val: c.MDB_val = undefined;
+ return switch (c.mdb_cursor_get(self.ptr, &key, &val, @intFromEnum(flags))) {
0 => {
const ptr = @as(*K, @constCast(k));
ptr.* = std.mem.bytesToValue(K, key.mv_data.?);
return std.mem.bytesToValue(V, val.mv_data.?);
},
- lmdb.MDB_NOTFOUND => null,
+ c.MDB_NOTFOUND => null,
else => |err| {
_ = err;
return error.CursorGet;
@@ -73,11 +73,11 @@ pub const Cursor = struct {
}
pub fn del(self: Self, k: anytype) !void {
- var key = lmdb.MDB_val{
+ var key = c.MDB_val{
.mv_size = @sizeOf(@TypeOf(k)),
- .mv_data = @constCast(@ptrCast(&k)),
+ .mv_data = @ptrCast(@constCast(&k)),
};
- switch (lmdb.mdb_cursor_del(self.ptr, &key, 0)) {
+ switch (c.mdb_cursor_del(self.ptr, &key, 0)) {
0 => {},
else => |err| {
_ = err;
@@ -90,16 +90,16 @@ pub const Cursor = struct {
const k_ti = @typeInfo(@TypeOf(k));
const K = k_ti.pointer.child;
- var key = lmdb.MDB_val{
+ var key = c.MDB_val{
.mv_size = @sizeOf(K),
- .mv_data = @constCast(@ptrCast(k)),
+ .mv_data = @ptrCast(@constCast(k)),
};
- var val: lmdb.MDB_val = undefined;
- return switch (lmdb.mdb_cursor_get(self.ptr, &key, &val, @intFromEnum(flags))) {
+ var val: c.MDB_val = undefined;
+ return switch (c.mdb_cursor_get(self.ptr, &key, &val, @intFromEnum(flags))) {
0 => {
return true;
},
- lmdb.MDB_NOTFOUND => {
+ c.MDB_NOTFOUND => {
return false;
},
else => {
@@ -112,34 +112,34 @@ pub const Cursor = struct {
pub const Dbi = struct {
const Self = @This();
- ptr: lmdb.MDB_dbi = undefined,
+ ptr: c.MDB_dbi = undefined,
txn: Txn = undefined,
env: Env = undefined,
pub fn close(self: Self) void {
// TODO: necessary?
- lmdb.mdb_dbi_close(self.env.ptr, self.ptr);
+ c.mdb_dbi_close(self.env.ptr, self.ptr);
}
pub fn cursor(self: Self) !Cursor {
var result = Cursor{};
- return switch (lmdb.mdb_cursor_open(self.txn.ptr, self.ptr, &result.ptr)) {
+ return switch (c.mdb_cursor_open(self.txn.ptr, self.ptr, &result.ptr)) {
0 => result,
else => error.DbiCursor,
};
}
pub fn put(self: Self, k: anytype, v: anytype) !void {
- var key = lmdb.MDB_val{
+ var key = c.MDB_val{
.mv_size = @sizeOf(@TypeOf(k)),
- .mv_data = @constCast(@ptrCast(&k)),
+ .mv_data = @ptrCast(@constCast(&k)),
};
- var val = lmdb.MDB_val{
+ var val = c.MDB_val{
.mv_size = @sizeOf(@TypeOf(v)),
- .mv_data = @constCast(@ptrCast(&v)),
+ .mv_data = @ptrCast(@constCast(&v)),
};
- switch (lmdb.mdb_put(self.txn.ptr, self.ptr, &key, &val, 0)) {
+ switch (c.mdb_put(self.txn.ptr, self.ptr, &key, &val, 0)) {
0 => {},
else => |err| {
_ = err;
@@ -149,29 +149,31 @@ pub const Dbi = struct {
}
pub fn get(self: Self, k: anytype, comptime V: type) !V {
- var key = lmdb.MDB_val{
+ var key = c.MDB_val{
.mv_size = @sizeOf(@TypeOf(k)),
- .mv_data = @constCast(@ptrCast(&k)),
+ .mv_data = @ptrCast(@constCast(&k)),
};
- var val: lmdb.MDB_val = undefined;
- return switch (lmdb.mdb_get(self.txn.ptr, self.ptr, &key, &val)) {
+ var val: c.MDB_val = undefined;
+ switch (c.mdb_get(self.txn.ptr, self.ptr, &key, &val)) {
0 => {
return std.mem.bytesToValue(V, val.mv_data.?);
},
- lmdb.MDB_NOTFOUND => error.NotFound,
+ c.MDB_NOTFOUND => {
+ return error.NotFound;
+ },
else => |err| {
_ = err;
return error.DbiGet;
},
- };
+ }
}
pub fn del(self: Self, k: anytype) !void {
- var key = lmdb.MDB_val{
+ var key = c.MDB_val{
.mv_size = @sizeOf(@TypeOf(k)),
- .mv_data = @constCast(@ptrCast(&k)),
+ .mv_data = @ptrCast(@constCast(&k)),
};
- switch (lmdb.mdb_del(self.txn.ptr, self.ptr, &key, null)) {
+ switch (c.mdb_del(self.txn.ptr, self.ptr, &key, null)) {
0 => {},
else => |err| {
_ = err;
@@ -181,16 +183,16 @@ pub const Dbi = struct {
}
pub fn has(self: Self, k: anytype) !bool {
- var key = lmdb.MDB_val{
+ var key = c.MDB_val{
.mv_size = @sizeOf(@TypeOf(k)),
- .mv_data = @constCast(@ptrCast(&k)),
+ .mv_data = @ptrCast(@constCast(&k)),
};
- var val: lmdb.MDB_val = undefined;
- return switch (lmdb.mdb_get(self.txn.ptr, self.ptr, &key, &val)) {
+ var val: c.MDB_val = undefined;
+ return switch (c.mdb_get(self.txn.ptr, self.ptr, &key, &val)) {
0 => {
return true;
},
- lmdb.MDB_NOTFOUND => {
+ c.MDB_NOTFOUND => {
return false;
},
else => |err| {
@@ -202,13 +204,13 @@ pub const Dbi = struct {
};
pub const Txn = struct {
- ptr: ?*lmdb.MDB_txn = undefined,
+ ptr: ?*c.MDB_txn = undefined,
env: Env = undefined,
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)) {
+ // TODO: c.MDB_INTEGERKEY?
+ switch (c.mdb_dbi_open(self.ptr, @ptrCast(name), c.MDB_CREATE, &result.ptr)) {
0 => return result,
else => |err| {
_ = err;
@@ -218,10 +220,10 @@ pub const Txn = struct {
}
pub fn commit(self: Txn) !void {
- switch (lmdb.mdb_txn_commit(self.ptr)) {
+ switch (c.mdb_txn_commit(self.ptr)) {
0 => {},
- lmdb.MDB_MAP_FULL => {
- _ = lmdb.mdb_env_set_mapsize(self.env.ptr, 0);
+ c.MDB_MAP_FULL => {
+ _ = c.mdb_env_set_mapsize(self.env.ptr, 0);
return error.TxnCommitMapFull;
},
else => |err| {
@@ -232,21 +234,21 @@ pub const Txn = struct {
}
pub fn abort(self: Txn) void {
- lmdb.mdb_txn_abort(self.ptr);
+ c.mdb_txn_abort(self.ptr);
}
};
pub const Env = struct {
- ptr: ?*lmdb.MDB_env = undefined,
+ ptr: ?*c.MDB_env = undefined,
- pub fn open(name: [:0]const u8, size: lmdb.mdb_size_t) !Env {
+ pub fn open(name: [:0]const u8, size: c.mdb_size_t) !Env {
var result = Env{};
- _ = lmdb.mdb_env_create(&result.ptr);
- _ = lmdb.mdb_env_set_maxdbs(result.ptr, 10);
- _ = lmdb.mdb_env_set_mapsize(result.ptr, size);
- const res = lmdb.mdb_env_open(result.ptr, name, lmdb.MDB_WRITEMAP | lmdb.MDB_NOSUBDIR, 0o664);
- // _ = lmdb.mdb_env_open(result.ptr, name, lmdb.MDB_NOSYNC | lmdb.MDB_WRITEMAP, 0o664);
+ _ = c.mdb_env_create(&result.ptr);
+ _ = c.mdb_env_set_maxdbs(result.ptr, 10);
+ _ = c.mdb_env_set_mapsize(result.ptr, size);
+ const res = c.mdb_env_open(result.ptr, name, c.MDB_WRITEMAP | c.MDB_NOSUBDIR, 0o664);
+ // _ = c.mdb_env_open(result.ptr, name, c.MDB_NOSYNC | c.MDB_WRITEMAP, 0o664);
if (res != 0) {
return error.EnvOpen;
@@ -256,12 +258,12 @@ pub const Env = struct {
}
pub fn close(self: Env) void {
- lmdb.mdb_env_close(self.ptr);
+ c.mdb_env_close(self.ptr);
}
pub fn txn(self: Env) !Txn {
var result = Txn{ .env = self };
- switch (lmdb.mdb_txn_begin(self.ptr, null, 0, &result.ptr)) {
+ switch (c.mdb_txn_begin(self.ptr, null, 0, &result.ptr)) {
0 => return result,
else => |err| {
_ = err;
@@ -271,7 +273,7 @@ pub const Env = struct {
}
pub fn sync(self: Env) !void {
- switch (lmdb.mdb_env_sync(self.ptr, 1)) {
+ switch (c.mdb_env_sync(self.ptr, 1)) {
0 => {},
else => |err| {
_ = err;
@@ -341,13 +343,13 @@ test "cursor" {
}
}
-// pub fn get(txn: ?*lmdb.MDB_txn, dbi: lmdb.MDB_dbi, k: anytype, comptime T: type) ?T {
-// var key = lmdb.MDB_val{
+// pub fn get(txn: ?*c.MDB_txn, dbi: c.MDB_dbi, k: anytype, comptime T: type) ?T {
+// var key = c.MDB_val{
// .mv_size = @sizeOf(@TypeOf(k)),
// .mv_data = @constCast(@ptrCast(&k)),
// };
-// var val: lmdb.MDB_val = undefined;
-// return switch (lmdb.mdb_get(txn, dbi, &key, &val)) {
+// var val: c.MDB_val = undefined;
+// return switch (c.mdb_get(txn, dbi, &key, &val)) {
// 0 => @as(?*align(1) T, @alignCast(@ptrCast(val.mv_data))).?.*,
// else => |err| {
// std.debug.print("get err: {}\n", .{err});
@@ -356,16 +358,16 @@ test "cursor" {
// };
// }
-// pub fn put(txn: ?*lmdb.MDB_txn, dbi: lmdb.MDB_dbi, k: anytype, v: anytype) void {
-// var key = lmdb.MDB_val{
+// pub fn put(txn: ?*c.MDB_txn, dbi: c.MDB_dbi, k: anytype, v: anytype) void {
+// var key = c.MDB_val{
// .mv_size = @sizeOf(@TypeOf(k)),
// .mv_data = @constCast(@ptrCast(&k)),
// };
-// var val = lmdb.MDB_val{
+// var val = c.MDB_val{
// .mv_size = @sizeOf(@TypeOf(v)),
// .mv_data = @constCast(@ptrCast(&v)),
// };
-// switch (lmdb.mdb_put(txn, dbi, &key, &val, 0)) {
+// switch (c.mdb_put(txn, dbi, &key, &val, 0)) {
// 0 => {},
// else => |err| {
// std.debug.print("put err: {}\n", .{err});
@@ -373,12 +375,12 @@ test "cursor" {
// }
// }
-// pub fn del(txn: ?*lmdb.MDB_txn, dbi: lmdb.MDB_dbi, k: anytype) void {
-// var key = lmdb.MDB_val{
+// pub fn del(txn: ?*c.MDB_txn, dbi: c.MDB_dbi, k: anytype) void {
+// var key = c.MDB_val{
// .mv_size = @sizeOf(@TypeOf(k)),
// .mv_data = @constCast(@ptrCast(&k)),
// };
-// switch (lmdb.mdb_del(txn, dbi, &key, null)) {
+// switch (c.mdb_del(txn, dbi, &key, null)) {
// 0 => {},
// else => |err| {
// std.debug.print("del err: {}\n", .{err});
@@ -386,15 +388,15 @@ test "cursor" {
// }
// }
-// pub fn has(txn: ?*lmdb.MDB_txn, dbi: lmdb.MDB_dbi, k: anytype) bool {
-// var key = lmdb.MDB_val{
+// pub fn has(txn: ?*c.MDB_txn, dbi: c.MDB_dbi, k: anytype) bool {
+// var key = c.MDB_val{
// .mv_size = @sizeOf(@TypeOf(k)),
// .mv_data = @constCast(@ptrCast(&k)),
// };
-// var val: lmdb.MDB_val = undefined;
-// return switch (lmdb.mdb_get(txn, dbi, &key, &val)) {
+// var val: c.MDB_val = undefined;
+// return switch (c.mdb_get(txn, dbi, &key, &val)) {
// 0 => true,
-// lmdb.MDB_NOTFOUND => false,
+// c.MDB_NOTFOUND => false,
// else => |err| {
// std.debug.print("has err: {}\n", .{err});
// return false;