|
13 | 13 |
|
14 | 14 | #include "utils/clustering.hpp" |
15 | 15 | #include "utils/matrix.hpp" |
| 16 | +#include "utils/mmap_hashmap.hpp" |
16 | 17 | #include "utils/tfidf.hpp" |
17 | 18 | #include "utils/parallel.hpp" |
18 | 19 | #include "xmc/inference.hpp" |
@@ -474,4 +475,73 @@ extern "C" { |
474 | 475 | C_ANN_HNSW_PREDICT(_csr_ip_f32, ScipyCsrF32, pecos::csr_t, hnsw_csr_ip_t) |
475 | 476 | C_ANN_HNSW_PREDICT(_csr_l2_f32, ScipyCsrF32, pecos::csr_t, hnsw_csr_l2_t) |
476 | 477 |
|
| 478 | + // ==== C Interface of Memory-mappable Hashmap ==== |
| 479 | + |
| 480 | + typedef pecos::mmap_hashmap::Str2IntMap mmap_hashmap_str2int; |
| 481 | + typedef pecos::mmap_hashmap::Int2IntMap mmap_hashmap_int2int; |
| 482 | + |
| 483 | + // New |
| 484 | + #define MMAP_MAP_NEW(SUFFIX) \ |
| 485 | + void* mmap_hashmap_new_ ## SUFFIX () { \ |
| 486 | + return static_cast<void*>(new mmap_hashmap_ ## SUFFIX()); } |
| 487 | + MMAP_MAP_NEW(str2int) |
| 488 | + MMAP_MAP_NEW(int2int) |
| 489 | + |
| 490 | + // Destruct |
| 491 | + #define MMAP_MAP_DESTRUCT(SUFFIX) \ |
| 492 | + void mmap_hashmap_destruct_ ## SUFFIX (void* map_ptr) { \ |
| 493 | + delete static_cast<mmap_hashmap_ ## SUFFIX *>(map_ptr); } |
| 494 | + MMAP_MAP_DESTRUCT(str2int) |
| 495 | + MMAP_MAP_DESTRUCT(int2int) |
| 496 | + |
| 497 | + // Save |
| 498 | + #define MMAP_MAP_SAVE(SUFFIX) \ |
| 499 | + void mmap_hashmap_save_ ## SUFFIX (void* map_ptr, const char* map_dir) { \ |
| 500 | + static_cast<mmap_hashmap_ ## SUFFIX *>(map_ptr)->save(map_dir); } |
| 501 | + MMAP_MAP_SAVE(str2int) |
| 502 | + MMAP_MAP_SAVE(int2int) |
| 503 | + |
| 504 | + // Load |
| 505 | + #define MMAP_MAP_LOAD(SUFFIX) \ |
| 506 | + void* mmap_hashmap_load_ ## SUFFIX (const char* map_dir, const bool lazy_load) { \ |
| 507 | + mmap_hashmap_ ## SUFFIX * map_ptr = new mmap_hashmap_ ## SUFFIX(); \ |
| 508 | + map_ptr->load(map_dir, lazy_load); \ |
| 509 | + return static_cast<void *>(map_ptr); } |
| 510 | + MMAP_MAP_LOAD(str2int) |
| 511 | + MMAP_MAP_LOAD(int2int) |
| 512 | + |
| 513 | + // Size |
| 514 | + #define MMAP_MAP_SIZE(SUFFIX) \ |
| 515 | + size_t mmap_hashmap_size_ ## SUFFIX (void* map_ptr) { \ |
| 516 | + return static_cast<mmap_hashmap_ ## SUFFIX *>(map_ptr)->size(); } |
| 517 | + MMAP_MAP_SIZE(str2int) |
| 518 | + MMAP_MAP_SIZE(int2int) |
| 519 | + |
| 520 | + // Insert |
| 521 | + #define KEY_SINGLE_ARG(A,B) A,B |
| 522 | + #define MMAP_MAP_INSERT(SUFFIX, KEY, FUNC_CALL_KEY) \ |
| 523 | + void mmap_hashmap_insert_ ## SUFFIX (void* map_ptr, KEY, uint64_t val) { \ |
| 524 | + static_cast<mmap_hashmap_ ## SUFFIX *>(map_ptr)->insert(FUNC_CALL_KEY, val); } |
| 525 | + MMAP_MAP_INSERT(str2int, KEY_SINGLE_ARG(const char* key, uint32_t key_len), KEY_SINGLE_ARG(key, key_len)) |
| 526 | + MMAP_MAP_INSERT(int2int, uint64_t key, key) |
| 527 | + |
| 528 | + // Get |
| 529 | + #define MMAP_MAP_GET(SUFFIX, KEY, FUNC_CALL_KEY) \ |
| 530 | + uint64_t mmap_hashmap_get_ ## SUFFIX (void* map_ptr, KEY) { \ |
| 531 | + return static_cast<mmap_hashmap_ ## SUFFIX *>(map_ptr)->get(FUNC_CALL_KEY); } |
| 532 | + MMAP_MAP_GET(str2int, KEY_SINGLE_ARG(const char* key, uint32_t key_len), KEY_SINGLE_ARG(key, key_len)) |
| 533 | + MMAP_MAP_GET(int2int, uint64_t key, key) |
| 534 | + |
| 535 | + #define MMAP_MAP_GET_W_DEFAULT(SUFFIX, KEY, FUNC_CALL_KEY) \ |
| 536 | + uint64_t mmap_hashmap_get_w_default_ ## SUFFIX (void* map_ptr, KEY, uint64_t def_val) { \ |
| 537 | + return static_cast<mmap_hashmap_ ## SUFFIX *>(map_ptr)->get_w_default(FUNC_CALL_KEY, def_val); } |
| 538 | + MMAP_MAP_GET_W_DEFAULT(str2int, KEY_SINGLE_ARG(const char* key, uint32_t key_len), KEY_SINGLE_ARG(key, key_len)) |
| 539 | + MMAP_MAP_GET_W_DEFAULT(int2int, uint64_t key, key) |
| 540 | + |
| 541 | + // Contains |
| 542 | + #define MMAP_MAP_CONTAINS(SUFFIX, KEY, FUNC_CALL_KEY) \ |
| 543 | + bool mmap_hashmap_contains_ ## SUFFIX (void* map_ptr, KEY) { \ |
| 544 | + return static_cast<mmap_hashmap_ ## SUFFIX *>(map_ptr)->contains(FUNC_CALL_KEY); } |
| 545 | + MMAP_MAP_CONTAINS(str2int, KEY_SINGLE_ARG(const char* key, uint32_t key_len), KEY_SINGLE_ARG(key, key_len)) |
| 546 | + MMAP_MAP_CONTAINS(int2int, uint64_t key, key) |
477 | 547 | } |
0 commit comments