2
0

storage.zig 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. const std = @import("std");
  2. const backend_size = 1024 * 1024 * 100;
  3. var buf: [backend_size][]const u8 = undefined;
  4. var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
  5. const allocator = arena.allocator();
  6. pub fn hashKey(k: []const u8) u32 {
  7. return djb2(k);
  8. //return xoramasrosas(k);
  9. }
  10. pub fn djb2(key: []const u8) u32 {
  11. var hash: u32 = 5381;
  12. for (key) |c| {
  13. hash = ((hash << 5) +% hash) +% c;
  14. }
  15. return hash;
  16. }
  17. pub fn xoramasrosas(k: []const u8) u32 {
  18. var hash: u32 = 17 * 22;
  19. const x = "xoramasrosas";
  20. for (k, 0..) |char, i| {
  21. hash = hash +% (char ^ x[i % 12]) << 12;
  22. }
  23. return hash;
  24. }
  25. pub fn write(key: []const u8, value: []const u8) bool {
  26. const valueCopy = allocator.dupe(u8, value) catch {
  27. std.debug.print("Failed to duplicate value for key: {s}\n", .{key});
  28. return false;
  29. };
  30. const hash = hashKey(key);
  31. buf[hash % buf.len] = valueCopy;
  32. return true;
  33. }
  34. pub fn read(key: []const u8) ?[]const u8 {
  35. const hash = hashKey(key);
  36. return buf[hash % buf.len];
  37. }