start with cmph.zig and bdz.zig
This commit is contained in:
62
src/main.zig
62
src/main.zig
@@ -1,65 +1,3 @@
|
||||
const std = @import("std");
|
||||
|
||||
const c = @cImport({
|
||||
@cDefine("DEBUG", "1");
|
||||
@cInclude("stdio.h");
|
||||
@cInclude("string.h");
|
||||
@cInclude("cmph.h");
|
||||
});
|
||||
|
||||
const tempMph = "temp.mph";
|
||||
|
||||
pub fn main() !void {}
|
||||
|
||||
test "simple cmph usage" {
|
||||
var arena_instance = std.heap.ArenaAllocator.init(std.heap.page_allocator);
|
||||
const arena = arena_instance.allocator();
|
||||
const stdout = std.io.getStdOut().writer();
|
||||
|
||||
var vector = std.ArrayList([*:0]const u8).init(arena);
|
||||
try vector.appendSlice(&.{
|
||||
"aaaaaaaaaa",
|
||||
"bbbbbbbbbb",
|
||||
"cccccccccc",
|
||||
"dddddddddd",
|
||||
"eeeeeeeeee",
|
||||
"ffffffffff",
|
||||
"gggggggggg",
|
||||
"hhhhhhhhhh",
|
||||
"iiiiiiiiii",
|
||||
"jjjjjjjjjj",
|
||||
});
|
||||
var nkeys = @truncate(c_uint, vector.items.len);
|
||||
|
||||
var mphf_fd = c.fopen(tempMph, "w");
|
||||
var cvector = @ptrCast([*c][*c]u8, vector.items.ptr);
|
||||
var source = c.cmph_io_vector_adapter(cvector, nkeys);
|
||||
defer c.cmph_io_vector_adapter_destroy(source);
|
||||
var config: *c.cmph_config_t = c.cmph_config_new(source) orelse return error.OutOfMemory;
|
||||
c.cmph_config_set_algo(config, c.CMPH_BRZ);
|
||||
c.cmph_config_set_mphf_fd(config, mphf_fd);
|
||||
var hash: *c.cmph_t = c.cmph_new(config) orelse return error.OutOfMemory;
|
||||
c.cmph_config_destroy(config);
|
||||
_ = c.cmph_dump(hash, mphf_fd);
|
||||
c.cmph_destroy(hash);
|
||||
try closeCFile(mphf_fd);
|
||||
|
||||
mphf_fd = c.fopen(tempMph, "r");
|
||||
defer _ = c.fclose(mphf_fd);
|
||||
|
||||
hash = c.cmph_load(mphf_fd) orelse unreachable;
|
||||
defer c.cmph_destroy(hash);
|
||||
|
||||
try stdout.print("\n", .{});
|
||||
for (vector.items) |key| {
|
||||
var id = c.cmph_search(hash, key, @truncate(c_uint, c.strlen(key)));
|
||||
try stdout.print("key: {s}, id: {d}\n", .{ key, id });
|
||||
}
|
||||
}
|
||||
|
||||
fn closeCFile(f: *c.FILE) !void {
|
||||
var close_code = c.fclose(f);
|
||||
if (close_code != 0) {
|
||||
return std.os.unexpectedErrno(std.os.errno(close_code));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user