/
githubmirror
/
julia
Обзор
Документация
Войти
/
githubmirror
/
julia
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/support/htable.h
64 строки
2 KB
Jameson Nash
src: mark each function as extern or static
06 июл 2026, 18:37
06 июл 2026, 18:37
1674cb6
Код
Авторство
О чём код?
// This file is a part of Julia. License is MIT: https://julialang.org/license #ifndef JL_HTABLE_H #define JL_HTABLE_H #define HT_N_INLINE 32 #include "analyzer_annotations.h" #include <stddef.h> #ifdef __cplusplus extern "C" { #endif // Power-of-two hash table with linear probing. // // Keys and values are stored in consecutive elements // key = table[2*i] // value = table[2*i+1] // where `2*i < size`. An empty slot at index `i` is indicated with // `value == HT_NOTFOUND`. // // `_space` is reserved space for efficiently allocating small tables. typedef struct { size_t size; void **table; size_t count; // # of occupied key slots (live + tombstone) size_t live; // # of live entries (value != HT_NOTFOUND) void *_space[HT_N_INLINE]; } htable_t; // define this to be an invalid key/value #define HT_NOTFOUND ((void*)1) // initialize hash table, reserving space for `size` expected number of // elements. (Expect `h->size > size` for efficient occupancy factor.) htable_t *htable_new(htable_t *h, size_t size) JL_NOTSAFEPOINT; void htable_free(htable_t *h) JL_NOTSAFEPOINT; // clear and (possibly) change size void htable_reset(htable_t *h, size_t sz) JL_NOTSAFEPOINT; // Lookup and mutation. See htable.inc for detail. #define HTPROT(HTNAME) \ void *HTNAME##_get(htable_t *h, void *key) JL_NOTSAFEPOINT; \ void HTNAME##_put(htable_t *h, void *key, void *val) JL_NOTSAFEPOINT; \ void HTNAME##_adjoin(htable_t *h, void *key, void *val) JL_NOTSAFEPOINT;\ int HTNAME##_has(htable_t *h, void *key) JL_NOTSAFEPOINT; \ int HTNAME##_remove(htable_t *h, void *key) JL_NOTSAFEPOINT; \ void **HTNAME##_bp(htable_t *h, void *key) JL_NOTSAFEPOINT; #define HTPROT_R(HTNAME, _STATIC) \ _STATIC void *HTNAME##_get_r(htable_t *h, void *key, void *ctx) JL_NOTSAFEPOINT; \ _STATIC void HTNAME##_put_r(htable_t *h, void *key, void *val, void *ctx) JL_NOTSAFEPOINT; \ _STATIC void HTNAME##_adjoin_r(htable_t *h, void *key, void *val, void *ctx) JL_NOTSAFEPOINT; \ _STATIC int HTNAME##_has_r(htable_t *h, void *key, void *ctx) JL_NOTSAFEPOINT; \ _STATIC int HTNAME##_remove_r(htable_t *h, void *key, void *ctx) JL_NOTSAFEPOINT; \ _STATIC void **HTNAME##_bp_r(htable_t *h, void *key, void *ctx) JL_NOTSAFEPOINT; #ifdef __cplusplus } #endif #endif