Ruby
2.7.2p137(2020-10-01revision5445e0435260b449decf2ac16f9d09bae3cafe72)
|
Go to the documentation of this file.
6 #define ID_TABLE_DEBUG 0
9 #if ID_TABLE_DEBUG == 0
19 return rb_id_serial_to_id(
key);
25 return rb_id_to_serial(
id);
48 #define ITEM_GET_KEY(tbl, i) ((tbl)->items[i].key)
49 #define ITEM_KEY_ISSET(tbl, i) ((tbl)->items[i].key)
50 #define ITEM_COLLIDED(tbl, i) ((tbl)->items[i].collision)
51 #define ITEM_SET_COLLIDED(tbl, i) ((tbl)->items[i].collision = 1)
58 #define ITEM_GET_KEY(tbl, i) ((tbl)->items[i].key >> 1)
59 #define ITEM_KEY_ISSET(tbl, i) ((tbl)->items[i].key > 1)
60 #define ITEM_COLLIDED(tbl, i) ((tbl)->items[i].key & 1)
61 #define ITEM_SET_COLLIDED(tbl, i) ((tbl)->items[i].key |= 1)
79 return (capa + 1) << 2;
98 return rb_id_table_init(tbl, (
int)
capa);
119 return (
size_t)tbl->
num;
138 ix = (ix + d) &
mask;
155 ix = (ix + d) &
mask;
162 ITEM_SET_KEY(tbl, ix,
key);
174 ITEM_SET_KEY(tbl, ix, 0);
187 int new_cap = round_capa(tbl->
num + (tbl->
num >> 1));
191 if (new_cap < tbl->
capa) {
192 new_cap = round_capa(tbl->
used + (tbl->
used >> 1));
194 tmp_tbl.
capa = new_cap;
196 for (
i = 0;
i < tbl->
capa;
i++) {
199 hash_table_raw_insert(&tmp_tbl,
key, tbl->
items[
i].
val);
208 #if ID_TABLE_DEBUG && 0
229 int index = hash_table_index(tbl,
key);
243 const int index = hash_table_index(tbl,
key);
249 hash_table_extend(tbl);
250 hash_table_raw_insert(tbl,
key, val);
258 return rb_id_table_insert_key(tbl, id2key(
id), val);
265 int index = hash_table_index(tbl,
key);
266 return hash_delete_index(tbl,
index);
282 ret = (*replace)(
NULL, &val, data,
TRUE);
303 hash_delete_index(tbl,
i);
320 hash_delete_index(tbl,
i);
const char * rb_id2name(ID)
enum rb_id_table_iterator_result rb_id_table_update_callback_func_t(ID *id, VALUE *val, void *data, int existing)
#define ITEM_KEY_ISSET(tbl, i)
size_t rb_id_table_size(const struct rb_id_table *tbl)
rb_id_table_iterator_result
int rb_id_table_insert(struct rb_id_table *tbl, ID id, VALUE val)
void rb_id_table_foreach(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, void *data)
#define ITEM_GET_KEY(tbl, i)
enum rb_id_table_iterator_result rb_id_table_foreach_func_t(ID id, VALUE val, void *data)
size_t rb_id_table_memsize(const struct rb_id_table *tbl)
#define MEMZERO(p, type, n)
#define ZALLOC_N(type, n)
void rb_id_table_free(struct rb_id_table *tbl)
void rb_id_table_foreach_with_replace(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, rb_id_table_update_callback_func_t *replace, void *data)
struct rb_id_table * rb_id_table_create(size_t capa)
#define ITEM_COLLIDED(tbl, i)
void rb_id_table_foreach_values(struct rb_id_table *tbl, rb_id_table_foreach_values_func_t *func, void *data)
enum rb_id_table_iterator_result rb_id_table_foreach_values_func_t(VALUE val, void *data)
int rb_id_table_delete(struct rb_id_table *tbl, ID id)
int rb_id_table_lookup(struct rb_id_table *tbl, ID id, VALUE *valp)
#define ITEM_SET_COLLIDED(tbl, i)
void rb_id_table_clear(struct rb_id_table *tbl)