| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- const std = @import("std");
- const backend_size = 1024 * 1024 * 100;
- var buf: [backend_size][]const u8 = undefined;
- var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
- const allocator = arena.allocator();
- const EMPTY = "";
- pub fn hashKey(k: []const u8) u32 {
- return djb2(k);
- //return xoramasrosas(k);
- }
- pub fn djb2(key: []const u8) u32 {
- var hash: u32 = 5381;
- for (key) |c| {
- hash = ((hash << 5) +% hash) +% c;
- }
- return hash;
- }
- pub fn xoramasrosas(k: []const u8) u32 {
- var hash: u32 = 17 * 22;
- const x = "xoramasrosas";
- for (k, 0..) |char, i| {
- hash = hash +% (char ^ x[i % 12]) << 12;
- }
- return hash;
- }
- pub fn write(key: []const u8, value: []const u8) bool {
- const valueCopy = allocator.dupe(u8, value) catch {
- std.debug.print("Failed to duplicate value for key: {s}\n", .{key});
- return false;
- };
- const hash = hashKey(key);
- buf[hash % buf.len] = valueCopy;
- return true;
- }
- pub fn read(key: []const u8) ?[]const u8 {
- const hash = hashKey(key);
- if (buf[hash % buf.len].len == 0) {
- return null;
- }
- return buf[hash % buf.len];
- }
- pub fn delete(key: []const u8) bool {
- const hash = hashKey(key);
- if (hash % buf.len >= buf.len) {
- return false;
- }
- buf[hash % buf.len] = EMPTY;
- return true;
- }
|