Ruby: st.c File Reference

Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)

Data Structures | Macros | Typedefs | Functions
st.c File Reference
`#include "internal.h"`
`#include "internal/bits.h"`
`#include "internal/hash.h"`
`#include "internal/sanitizers.h"`
`#include <stdio.h>`
`#include <string.h>`
`#include <assert.h>`

Go to the source code of this file.

## Data Structures
struct | st_table_entry
struct | st_features
struct | functor

## Macros
#define | PREFETCH(addr, write_p) __builtin_prefetch(addr, write_p)
#define | EXPECT(expr, val) __builtin_expect(expr, val)
#define | ATTRIBUTE_UNUSED __attribute__((unused))
#define | type_numhash st_hashtype_num
#define | ST_INIT_VAL 0xafafafafafafafaf
#define | ST_INIT_VAL_BYTE 0xafa
#define | malloc ruby_xmalloc
#define | calloc ruby_xcalloc
#define | realloc ruby_xrealloc
#define | free ruby_xfree
#define | EQUAL(tab, x, y) ((x) == (y) || (*(tab)->type->compare)((x),(y)) == 0)
#define | PTR_EQUAL(tab, ptr, hash_val, key_) ((ptr)->hash == (hash_val) && EQUAL((tab), (key_), (ptr)->key))
#define | DO_PTR_EQUAL_CHECK(tab, ptr, hash_val, key, res, rebuilt_p)
#define | MAX_POWER2 30
#define | RESERVED_HASH_VAL (~(st_hash_t) 0)
#define | RESERVED_HASH_SUBSTITUTION_VAL ((st_hash_t) 0)
#define | MINIMAL_POWER2 2
#define | MAX_POWER2_FOR_TABLES_WITHOUT_BINS 4
#define | EMPTY_BIN 0
#define | DELETED_BIN 1
#define | ENTRY_BASE 2
#define | MARK_BIN_EMPTY(tab, i) (set_bin((tab)->bins, get_size_ind(tab), i, EMPTY_BIN))
#define | UNDEFINED_ENTRY_IND (~(st_index_t) 0)
#define | UNDEFINED_BIN_IND (~(st_index_t) 0)
#define | REBUILT_TABLE_ENTRY_IND (~(st_index_t) 1)
#define | REBUILT_TABLE_BIN_IND (~(st_index_t) 1)
#define | MARK_BIN_DELETED(tab, i)
#define | EMPTY_BIN_P(b) ((b) == EMPTY_BIN)
#define | DELETED_BIN_P(b) ((b) == DELETED_BIN)
#define | EMPTY_OR_DELETED_BIN_P(b) ((b) <= DELETED_BIN)
#define | IND_EMPTY_BIN_P(tab, i) (EMPTY_BIN_P(get_bin((tab)->bins, get_size_ind(tab), i)))
#define | IND_DELETED_BIN_P(tab, i) (DELETED_BIN_P(get_bin((tab)->bins, get_size_ind(tab), i)))
#define | IND_EMPTY_OR_DELETED_BIN_P(tab, i) (EMPTY_OR_DELETED_BIN_P(get_bin((tab)->bins, get_size_ind(tab), i)))
#define | MARK_ENTRY_DELETED(e_ptr) ((e_ptr)->hash = RESERVED_HASH_VAL)
#define | DELETED_ENTRY_P(e_ptr) ((e_ptr)->hash == RESERVED_HASH_VAL)
#define | COLLISION
#define | FOUND_BIN
#define | REBUILD_THRESHOLD 4
#define | FNV1_32A_INIT 0x811c9dc5
#define | FNV_32_PRIME 0x01000193
#define | BIG_CONSTANT(x, y) ((st_index_t)(x)<<32|(st_index_t)(y))
#define | ROTL(x, n) ((x)<<(n)|(x)>>(SIZEOF_ST_INDEX_T*CHAR_BIT-(n)))
#define | C1 (st_index_t)0xcc9e2d51
#define | C2 (st_index_t)0x1b873593
#define | r1 (17)
#define | r2 (11)
#define | r1 (16)
#define | r2 (13)
#define | r3 (16)
#define | data_at(n) (st_index_t)((unsigned char)data[(n)])
#define | UNALIGNED_ADD_4 UNALIGNED_ADD(2); UNALIGNED_ADD(1); UNALIGNED_ADD(0)
#define | UNALIGNED_ADD_ALL UNALIGNED_ADD_4
#define | UNALIGNED_ADD(n)
#define | SKIP_TAIL 1
#define | aligned_data data
#define | UNALIGNED_ADD(n)

## Typedefs
typedef st_index_t | st_hash_t

## Functions
st_table * | st_init_table_with_size (const struct st_hash_type *type, st_index_t size)
st_table * | st_init_table (const struct st_hash_type *type)
st_table * | st_init_numtable (void)
st_table * | st_init_numtable_with_size (st_index_t size)
st_table * | st_init_strtable (void)
st_table * | st_init_strtable_with_size (st_index_t size)
st_table * | st_init_strcasetable (void)
st_table * | st_init_strcasetable_with_size (st_index_t size)
void | st_clear (st_table *tab)
void | st_free_table (st_table *tab)
size_t | st_memsize (const st_table *tab)
int | st_lookup (st_table *tab, st_data_t key, st_data_t *value)
int | st_get_key (st_table *tab, st_data_t key, st_data_t *result)
int | st_insert (st_table *tab, st_data_t key, st_data_t value)
void | st_add_direct (st_table *tab, st_data_t key, st_data_t value)
int | st_insert2 (st_table *tab, st_data_t key, st_data_t value, st_data_t(*func)(st_data_t))
st_table * | st_copy (st_table *old_tab)
int | st_delete (st_table *tab, st_data_t *key, st_data_t *value)
int | st_delete_safe (st_table *tab, st_data_t *key, st_data_t *value, st_data_t never ATTRIBUTE_UNUSED)
int | st_shift (st_table *tab, st_data_t *key, st_data_t *value)
void | st_cleanup_safe (st_table *tab ATTRIBUTE_UNUSED, st_data_t never ATTRIBUTE_UNUSED)
int | st_update (st_table *tab, st_data_t key, st_update_callback_func *func, st_data_t arg)
int | st_foreach_with_replace (st_table *tab, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg)
int | st_foreach (st_table *tab, st_foreach_callback_func *func, st_data_t arg)
int | st_foreach_check (st_table *tab, st_foreach_check_callback_func *func, st_data_t arg, st_data_t never ATTRIBUTE_UNUSED)
st_index_t | st_keys (st_table *tab, st_data_t *keys, st_index_t size)
st_index_t | st_keys_check (st_table *tab, st_data_t *keys, st_index_t size, st_data_t never ATTRIBUTE_UNUSED)
st_index_t | st_values (st_table *tab, st_data_t *values, st_index_t size)
st_index_t | st_values_check (st_table *tab, st_data_t *values, st_index_t size, st_data_t never ATTRIBUTE_UNUSED)
| NO_SANITIZE ("unsigned-integer-overflow", static inline st_index_t murmur_step(st_index_t h, st_index_t k))
| NO_SANITIZE ("unsigned-integer-overflow", static inline st_index_t murmur_finish(st_index_t h))
| NO_SANITIZE ("unsigned-integer-overflow", extern st_index_t st_hash(const void *ptr, size_t len, st_index_t h))
st_index_t | st_hash (const void *ptr, size_t len, st_index_t h)
st_index_t | st_hash_uint32 (st_index_t h, uint32_t i)
| NO_SANITIZE ("unsigned-integer-overflow", extern st_index_t st_hash_uint(st_index_t h, st_index_t i))
st_index_t | st_hash_uint (st_index_t h, st_index_t i)
st_index_t | st_hash_end (st_index_t h)
st_index_t | rb_st_hash_start (st_index_t h)
int | st_locale_insensitive_strcasecmp (const char *s1, const char *s2)
int | st_locale_insensitive_strncasecmp (const char *s1, const char *s2, size_t n)
| NO_SANITIZE ("unsigned-integer-overflow", static st_index_t strcasehash(st_data_t))
int | st_numcmp (st_data_t x, st_data_t y)
st_index_t | st_numhash (st_data_t n)
void | rb_hash_bulk_insert_into_st_table (long argc, const VALUE *argv, VALUE hash)
st_data_t | rb_st_nth_key (st_table *tab, st_index_t index)

## Macro Definition Documentation

## ◆ aligned_data

#define aligned_data data

## ◆ ATTRIBUTE_UNUSED

#define ATTRIBUTE_UNUSED __attribute__((unused))

Definition at line 123 of file st.c.

## ◆ BIG_CONSTANT

#define BIG_CONSTANT | ( |  | x,
|  |  | y
| ) |  | ((st_index_t)(x)<<32|(st_index_t)(y))

Definition at line 1677 of file st.c.

## ◆ C1

#define C1 (st_index_t)0xcc9e2d51

Definition at line 1681 of file st.c.

## ◆ C2

#define C2 (st_index_t)0x1b873593

Definition at line 1682 of file st.c.

## ◆ calloc

#define calloc ruby_xcalloc

Definition at line 171 of file st.c.

## ◆ COLLISION

#define COLLISION

Definition at line 686 of file st.c.

## ◆ data_at

#define data_at | ( |  | n | ) | (st_index_t)((unsigned char)data[(n)])

## ◆ DELETED_BIN

#define DELETED_BIN 1

Definition at line 379 of file st.c.

## ◆ DELETED_BIN_P

#define DELETED_BIN_P | ( |  | b | ) | ((b) == DELETED_BIN)

Definition at line 408 of file st.c.

## ◆ DELETED_ENTRY_P

#define DELETED_ENTRY_P | ( |  | e_ptr | ) | ((e_ptr)->hash == RESERVED_HASH_VAL)

Definition at line 420 of file st.c.

## ◆ DO_PTR_EQUAL_CHECK

#define DO_PTR_EQUAL_CHECK | ( |  | tab,
|  |  | ptr,
|  |  | hash_val,
|  |  | key,
|  |  | res,
|  |  | rebuilt_p
| ) |  |

Value:
do { \
unsigned int _old_rebuilds_num = (tab)->rebuilds_num; \
res = PTR_EQUAL(tab, ptr, hash_val, key); \
rebuilt_p = _old_rebuilds_num != (tab)->rebuilds_num; \
} while (FALSE)
ptr
struct RIMemo * ptr
Definition: debug.c:88
FALSE
#define FALSE
Definition: nkf.h:174
key
key
Definition: openssl_missing.h:185
PTR_EQUAL
#define PTR_EQUAL(tab, ptr, hash_val, key_)
Definition: st.c:177
tab
Definition: enough.c:118

Definition at line 182 of file st.c.

## ◆ EMPTY_BIN

#define EMPTY_BIN 0

Definition at line 378 of file st.c.

## ◆ EMPTY_BIN_P

#define EMPTY_BIN_P | ( |  | b | ) | ((b) == EMPTY_BIN)

Definition at line 407 of file st.c.

## ◆ EMPTY_OR_DELETED_BIN_P

#define EMPTY_OR_DELETED_BIN_P | ( |  | b | ) | ((b) <= DELETED_BIN)

Definition at line 409 of file st.c.

## ◆ ENTRY_BASE

#define ENTRY_BASE 2

Definition at line 381 of file st.c.

## ◆ EQUAL

#define EQUAL | ( |  | tab,
|  |  | x,
|  |  | y
| ) |  | ((x) == (y) || (*(tab)->type->compare)((x),(y)) == 0)

Definition at line 176 of file st.c.

## ◆ EXPECT

#define EXPECT | ( |  | expr,
|  |  | val
| ) |  | __builtin_expect(expr, val)

Definition at line 122 of file st.c.

## ◆ FNV1_32A_INIT

#define FNV1_32A_INIT 0x811c9dc5

Definition at line 1655 of file st.c.

## ◆ FNV_32_PRIME

#define FNV_32_PRIME 0x01000193

Definition at line 1660 of file st.c.

## ◆ FOUND_BIN

#define FOUND_BIN

Definition at line 687 of file st.c.

## ◆ free

#define free ruby_xfree

Definition at line 173 of file st.c.

## ◆ IND_DELETED_BIN_P

#define IND_DELETED_BIN_P | ( |  | tab,
|  |  | i
| ) |  | (DELETED_BIN_P(get_bin((tab)->bins, get_size_ind(tab), i)))

Definition at line 414 of file st.c.

## ◆ IND_EMPTY_BIN_P

#define IND_EMPTY_BIN_P | ( |  | tab,
|  |  | i
| ) |  | (EMPTY_BIN_P(get_bin((tab)->bins, get_size_ind(tab), i)))

Definition at line 413 of file st.c.

## ◆ IND_EMPTY_OR_DELETED_BIN_P

#define IND_EMPTY_OR_DELETED_BIN_P | ( |  | tab,
|  |  | i
| ) |  | (EMPTY_OR_DELETED_BIN_P(get_bin((tab)->bins, get_size_ind(tab), i)))

Definition at line 415 of file st.c.

## ◆ malloc

#define malloc ruby_xmalloc

Definition at line 170 of file st.c.

## ◆ MARK_BIN_DELETED

#define MARK_BIN_DELETED | ( |  | tab,
|  |  | i
| ) |  |

Value:
do { \
set_bin((tab)->bins, get_size_ind(tab), i, DELETED_BIN); \
} while (0)
DELETED_BIN
#define DELETED_BIN
Definition: st.c:379

Definition at line 400 of file st.c.

## ◆ MARK_BIN_EMPTY

#define MARK_BIN_EMPTY | ( |  | tab,
|  |  | i
| ) |  | (set_bin((tab)->bins, get_size_ind(tab), i, EMPTY_BIN))

Definition at line 385 of file st.c.

## ◆ MARK_ENTRY_DELETED

#define MARK_ENTRY_DELETED | ( |  | e_ptr | ) | ((e_ptr)->hash = RESERVED_HASH_VAL)

Definition at line 419 of file st.c.

## ◆ MAX_POWER2

#define MAX_POWER2 30

Definition at line 274 of file st.c.

## ◆ MAX_POWER2_FOR_TABLES_WITHOUT_BINS

#define MAX_POWER2_FOR_TABLES_WITHOUT_BINS 4

Definition at line 336 of file st.c.

## ◆ MINIMAL_POWER2

#define MINIMAL_POWER2 2

Definition at line 328 of file st.c.

## ◆ PREFETCH

#define PREFETCH | ( |  | addr,
|  |  | write_p
| ) |  | __builtin_prefetch(addr, write_p)

Definition at line 121 of file st.c.

## ◆ PTR_EQUAL

#define PTR_EQUAL | ( |  | tab,
|  |  | ptr,
|  |  | hash_val,
|  |  | key_
| ) |  | ((ptr)->hash == (hash_val) && EQUAL((tab), (key_), (ptr)->key))

Definition at line 177 of file st.c.

## ◆ r1 [1/2]

#define r1 (17)

## ◆ r1 [2/2]

#define r1 (16)

## ◆ r2 [1/2]

#define r2 (11)

## ◆ r2 [2/2]

#define r2 (13)

## ◆ r3

#define r3 (16)

## ◆ realloc

#define realloc ruby_xrealloc

Definition at line 172 of file st.c.

## ◆ REBUILD_THRESHOLD

#define REBUILD_THRESHOLD 4

Definition at line 693 of file st.c.

## ◆ REBUILT_TABLE_BIN_IND

#define REBUILT_TABLE_BIN_IND (~(st_index_t) 1)

Definition at line 395 of file st.c.

## ◆ REBUILT_TABLE_ENTRY_IND

#define REBUILT_TABLE_ENTRY_IND (~(st_index_t) 1)

Definition at line 394 of file st.c.

## ◆ RESERVED_HASH_SUBSTITUTION_VAL

#define RESERVED_HASH_SUBSTITUTION_VAL ((st_hash_t) 0)

Definition at line 314 of file st.c.

## ◆ RESERVED_HASH_VAL

#define RESERVED_HASH_VAL (~(st_hash_t) 0)

Definition at line 313 of file st.c.

## ◆ ROTL

#define ROTL | ( |  | x,
|  |  | n
| ) |  | ((x)<<(n)|(x)>>(SIZEOF_ST_INDEX_T*CHAR_BIT-(n)))

Definition at line 1678 of file st.c.

## ◆ SKIP_TAIL

#define SKIP_TAIL 1

## ◆ ST_INIT_VAL

#define ST_INIT_VAL 0xafafafafafafafaf

Definition at line 162 of file st.c.

## ◆ ST_INIT_VAL_BYTE

#define ST_INIT_VAL_BYTE 0xafa

Definition at line 163 of file st.c.

## ◆ type_numhash

#define type_numhash st_hashtype_num

Definition at line 139 of file st.c.

## ◆ UNALIGNED_ADD [1/3]

#define UNALIGNED_ADD | ( |  | n | ) |

Value:
case SIZEOF_ST_INDEX_T - (n) - 1: \
t |= data_at(n) << CHAR_BIT*(n)
CHAR_BIT
#define CHAR_BIT
Definition: limits.h:44
data_at
#define data_at(n)
SIZEOF_ST_INDEX_T
#define SIZEOF_ST_INDEX_T
Definition: st.h:59
t
#define t
Definition: symbol.c:253

## ◆ UNALIGNED_ADD [2/3]

#define UNALIGNED_ADD | ( |  | n | ) |

Value:
case (n) + 1: \
d |= data_at(n) << CHAR_BIT*(n)

## ◆ UNALIGNED_ADD [3/3]

#define UNALIGNED_ADD | ( |  | n | ) |

Value:
case (n) + 1: \
t |= data_at(n) << CHAR_BIT*(n)

## ◆ UNALIGNED_ADD_4

#define UNALIGNED_ADD_4 UNALIGNED_ADD(2); UNALIGNED_ADD(1); UNALIGNED_ADD(0)

## ◆ UNALIGNED_ADD_ALL

#define UNALIGNED_ADD_ALL UNALIGNED_ADD_4

## ◆ UNDEFINED_BIN_IND

#define UNDEFINED_BIN_IND (~(st_index_t) 0)

Definition at line 390 of file st.c.

## ◆ UNDEFINED_ENTRY_IND

#define UNDEFINED_ENTRY_IND (~(st_index_t) 0)

Definition at line 389 of file st.c.

## Typedef Documentation

## ◆ st_hash_t

typedef st_index_t st_hash_t

Definition at line 131 of file st.c.

## Function Documentation

## ◆ NO_SANITIZE() [1/5]

NO_SANITIZE | ( | "unsigned-integer-overflow" | ,
|  | extern st_index_t | st_hashconst void *ptr, size_t len, st_index_t h
| ) |  |

## ◆ NO_SANITIZE() [2/5]

NO_SANITIZE | ( | "unsigned-integer-overflow" | ,
|  | extern st_index_t | st_hash_uintst_index_t h, st_index_t i
| ) |  |

## ◆ NO_SANITIZE() [3/5]

NO_SANITIZE | ( | "unsigned-integer-overflow" | ,
|  | static inline st_index_t | murmur_finishst_index_t h
| ) |  |

## ◆ NO_SANITIZE() [4/5]

NO_SANITIZE | ( | "unsigned-integer-overflow" | ,
|  | static inline st_index_t | murmur_stepst_index_t h, st_index_t k
| ) |  |

## ◆ NO_SANITIZE() [5/5]

NO_SANITIZE | ( | "unsigned-integer-overflow" | ,
|  | static st_index_t | strcasehashst_data_t
| ) |  |

## ◆ rb_hash_bulk_insert_into_st_table()

void rb_hash_bulk_insert_into_st_table | ( | long | argc,
|  | const VALUE * | argv,
|  | VALUE | hash
| ) |  |

Definition at line 2224 of file st.c.

References argc, argv, MAX_POWER2_FOR_TABLES_WITHOUT_BINS, RHASH_TBL_RAW, and UNLIKELY.

Referenced by rb_hash_bulk_insert().

## ◆ rb_st_hash_start()

st_index_t rb_st_hash_start | ( | st_index_t | h | ) |

Definition at line 1917 of file st.c.

## ◆ rb_st_nth_key()

st_data_t rb_st_nth_key | ( | st_table * | tab,
|  | st_index_t | index
| ) |  |

Definition at line 2244 of file st.c.

References LIKELY, and rb_bug().

## ◆ st_add_direct()

void st_add_direct | ( | st_table * | tab,
|  | st_data_t | key,
|  | st_data_t | value
| ) |  |

Definition at line 1145 of file st.c.

References key.

## ◆ st_cleanup_safe()

void st_cleanup_safe | ( | st_table *tab | ATTRIBUTE_UNUSED,
|  | st_data_t never | ATTRIBUTE_UNUSED
| ) |  |

Definition at line 1365 of file st.c.

## ◆ st_clear()

void st_clear | ( | st_table * | tab | ) |

Definition at line 628 of file st.c.

## ◆ st_copy()

st_table * st_copy | ( | st_table * | old_tab | ) |

Definition at line 1204 of file st.c.

References st_table::bins, st_table::entries, free, malloc, MEMCPY, NULL, and st_free_table.

## ◆ st_delete()

int st_delete | ( | st_table * | tab,
|  | st_data_t * | key,
|  | st_data_t * | value
| ) |  |

Definition at line 1295 of file st.c.

References key.

## ◆ st_delete_safe()

int st_delete_safe | ( | st_table * | tab,
|  | st_data_t * | key,
|  | st_data_t * | value,
|  | st_data_t never | ATTRIBUTE_UNUSED
| ) |  |

Definition at line 1306 of file st.c.

References key.

## ◆ st_foreach()

int st_foreach | ( | st_table * | tab,
|  | st_foreach_callback_func * | func,
|  | st_data_t | arg
| ) |  |

Definition at line 1566 of file st.c.

References functor::arg, f, FALSE, and functor::func.

## ◆ st_foreach_check()

int st_foreach_check | ( | st_table * | tab,
|  | st_foreach_check_callback_func * | func,
|  | st_data_t | arg,
|  | st_data_t never | ATTRIBUTE_UNUSED
| ) |  |

Definition at line 1574 of file st.c.

References functor::arg, functor::func, and TRUE.

## ◆ st_foreach_with_replace()

int st_foreach_with_replace | ( | st_table * | tab,
|  | st_foreach_check_callback_func * | func,
|  | st_update_callback_func * | replace,
|  | st_data_t | arg
| ) |  |

Definition at line 1548 of file st.c.

References TRUE.

## ◆ st_free_table()

void st_free_table | ( | st_table * | tab | ) |

Definition at line 636 of file st.c.

References free, and NULL.

## ◆ st_get_key()

int st_get_key | ( | st_table * | tab,
|  | st_data_t | key,
|  | st_data_t * | result
| ) |  |

Definition at line 1036 of file st.c.

References ENTRY_BASE, EXPECT, key, NULL, REBUILT_TABLE_ENTRY_IND, and UNDEFINED_ENTRY_IND.

## ◆ st_hash()

st_index_t st_hash | ( | const void * | ptr,
|  | size_t | len,
|  | st_index_t | h
| ) |  |

Definition at line 1744 of file st.c.

References aligned_data, C2, CHAR_BIT, data_at, int(), len, ptr, ROTL, SIZEOF_ST_INDEX_T, t, and UNALIGNED_ADD_ALL.

## ◆ st_hash_end()

st_index_t st_hash_end | ( | st_index_t | h | ) |

Definition at line 1909 of file st.c.

## ◆ st_hash_uint()

st_index_t st_hash_uint | ( | st_index_t | h,
|  | st_index_t | i
| ) |  |

Definition at line 1896 of file st.c.

## ◆ st_hash_uint32()

st_index_t st_hash_uint32 | ( | st_index_t | h,
|  | uint32_t | i
| ) |  |

Definition at line 1889 of file st.c.

## ◆ st_init_numtable()

st_table * st_init_numtable | ( | void |  | ) |

Definition at line 583 of file st.c.

References st_init_table, and type_numhash.

## ◆ st_init_numtable_with_size()

st_table * st_init_numtable_with_size | ( | st_index_t | size | ) |

Definition at line 590 of file st.c.

References st_init_table_with_size, and type_numhash.

## ◆ st_init_strcasetable()

st_table * st_init_strcasetable | ( | void |  | ) |

Definition at line 613 of file st.c.

References st_init_table.

## ◆ st_init_strcasetable_with_size()

st_table * st_init_strcasetable_with_size | ( | st_index_t | size | ) |

Definition at line 621 of file st.c.

References st_init_table_with_size.

## ◆ st_init_strtable()

st_table * st_init_strtable | ( | void |  | ) |

Definition at line 598 of file st.c.

References st_init_table.

## ◆ st_init_strtable_with_size()

st_table * st_init_strtable_with_size | ( | st_index_t | size | ) |

Definition at line 605 of file st.c.

References st_init_table_with_size.

## ◆ st_init_table()

st_table * st_init_table | ( | const struct st_hash_type * | type | ) |

Definition at line 575 of file st.c.

References st_init_table_with_size.

## ◆ st_init_table_with_size()

st_table * st_init_table_with_size | ( | const struct st_hash_type * | type,
|  | st_index_t | size
| ) |  |

Definition at line 516 of file st.c.

References st_features::bin_power, free, getenv, malloc, MAX_POWER2_FOR_TABLES_WITHOUT_BINS, NULL, st_features::size_ind, and st_free_table.

## ◆ st_insert()

int st_insert | ( | st_table * | tab,
|  | st_data_t | key,
|  | st_data_t | value
| ) |  |

Definition at line 1076 of file st.c.

References ENTRY_BASE, EXPECT, st_table_entry::hash, key, st_table_entry::key, NULL, REBUILT_TABLE_ENTRY_IND, st_table_entry::record, UNDEFINED_BIN_IND, and UNDEFINED_ENTRY_IND.

## ◆ st_insert2()

int st_insert2 | ( | st_table * | tab,
|  | st_data_t | key,
|  | st_data_t | value,
|  | st_data_t(*)(st_data_t) | func
| ) |  |

Definition at line 1157 of file st.c.

References ENTRY_BASE, EXPECT, st_table_entry::hash, key, st_table_entry::key, NULL, REBUILT_TABLE_ENTRY_IND, st_table_entry::record, UNDEFINED_BIN_IND, and UNDEFINED_ENTRY_IND.

## ◆ st_keys()

st_index_t st_keys | ( | st_table * | tab,
|  | st_data_t * | keys,
|  | st_index_t | size
| ) |  |

Definition at line 1605 of file st.c.

## ◆ st_keys_check()

st_index_t st_keys_check | ( | st_table * | tab,
|  | st_data_t * | keys,
|  | st_index_t | size,
|  | st_data_t never | ATTRIBUTE_UNUSED
| ) |  |

Definition at line 1612 of file st.c.

## ◆ st_locale_insensitive_strcasecmp()

int st_locale_insensitive_strcasecmp | ( | const char * | s1,
|  | const char * | s2
| ) |  |

Definition at line 1930 of file st.c.

## ◆ st_locale_insensitive_strncasecmp()

int st_locale_insensitive_strncasecmp | ( | const char * | s1,
|  | const char * | s2,
|  | size_t | n
| ) |  |

Definition at line 1954 of file st.c.

## ◆ st_lookup()

int st_lookup | ( | st_table * | tab,
|  | st_data_t | key,
|  | st_data_t * | value
| ) |  |

Definition at line 1007 of file st.c.

References ENTRY_BASE, EXPECT, key, NULL, REBUILT_TABLE_ENTRY_IND, and UNDEFINED_ENTRY_IND.

## ◆ st_memsize()

size_t st_memsize | ( | const st_table * | tab | ) |

Definition at line 646 of file st.c.

References NULL.

## ◆ st_numcmp()

int st_numcmp | ( | st_data_t | x,
|  | st_data_t | y
| ) |  |

Definition at line 2017 of file st.c.

## ◆ st_numhash()

st_index_t st_numhash | ( | st_data_t | n | ) |

Definition at line 2023 of file st.c.

## ◆ st_shift()

int st_shift | ( | st_table * | tab,
|  | st_data_t * | key,
|  | st_data_t * | value
| ) |  |

Definition at line 1317 of file st.c.

References DELETED_ENTRY_P, ENTRY_BASE, EXPECT, st_table_entry::hash, key, st_table_entry::key, MARK_BIN_DELETED, MARK_ENTRY_DELETED, NULL, REBUILT_TABLE_BIN_IND, REBUILT_TABLE_ENTRY_IND, and st_table_entry::record.

## ◆ st_update()

int st_update | ( | st_table * | tab,
|  | st_data_t | key,
|  | st_update_callback_func * | func,
|  | st_data_t | arg
| ) |  |

Definition at line 1380 of file st.c.

References ENTRY_BASE, EXPECT, key, st_table_entry::key, MARK_BIN_DELETED, MARK_ENTRY_DELETED, NULL, REBUILT_TABLE_BIN_IND, REBUILT_TABLE_ENTRY_IND, st_table_entry::record, ST_CONTINUE, ST_DELETE, UNDEFINED_BIN_IND, and UNDEFINED_ENTRY_IND.

## ◆ st_values()

st_index_t st_values | ( | st_table * | tab,
|  | st_data_t * | values,
|  | st_index_t | size
| ) |  |

Definition at line 1642 of file st.c.

## ◆ st_values_check()

st_index_t st_values_check | ( | st_table * | tab,
|  | st_data_t * | values,
|  | st_index_t | size,
|  | st_data_t never | ATTRIBUTE_UNUSED
| ) |  |

Definition at line 1649 of file st.c.