aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/hashtab.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/hashtab.c')
-rw-r--r--src/nvim/hashtab.c37
1 files changed, 11 insertions, 26 deletions
diff --git a/src/nvim/hashtab.c b/src/nvim/hashtab.c
index f8fd8f44af..85cd59f59f 100644
--- a/src/nvim/hashtab.c
+++ b/src/nvim/hashtab.c
@@ -171,7 +171,7 @@ void hash_debug_results(void)
/// in the new item (@see hashitem_T). Must not be NULL.
///
/// @return OK if success.
-/// FAIL if key already present, or out of memory.
+/// FAIL if key already present
int hash_add(hashtab_T *ht, char_u *key)
{
hash_T hash = hash_hash(key);
@@ -180,7 +180,8 @@ int hash_add(hashtab_T *ht, char_u *key)
EMSG2(_(e_intern2), "hash_add()");
return FAIL;
}
- return hash_add_item(ht, hi, key, hash);
+ hash_add_item(ht, hi, key, hash);
+ return OK;
}
/// Add item "hi" for key "key" to hashtable "ht".
@@ -190,16 +191,8 @@ int hash_add(hashtab_T *ht, char_u *key)
/// @param key Pointer to the key for the new item. The key has to be contained
/// in the new item (@see hashitem_T). Must not be NULL.
/// @param hash The precomputed hash value for the key.
-///
-/// @return OK if success.
-/// FAIL if out of memory.
-int hash_add_item(hashtab_T *ht, hashitem_T *hi, char_u *key, hash_T hash)
+void hash_add_item(hashtab_T *ht, hashitem_T *hi, char_u *key, hash_T hash)
{
- // If resizing failed before and it fails again we can't add an item.
- if (ht->ht_error && (hash_may_resize(ht, 0) == FAIL)) {
- return FAIL;
- }
-
ht->ht_used++;
if (hi->hi_key == NULL) {
ht->ht_filled++;
@@ -208,7 +201,7 @@ int hash_add_item(hashtab_T *ht, hashitem_T *hi, char_u *key, hash_T hash)
hi->hi_hash = hash;
// When the space gets low may resize the array.
- return hash_may_resize(ht, 0);
+ hash_may_resize(ht, 0);
}
/// Remove item "hi" from hashtable "ht".
@@ -250,14 +243,11 @@ void hash_unlock(hashtab_T *ht)
/// - Shrink when too much empty space.
/// - Grow when not enough empty space.
/// If non-zero, passed minitems will be used.
-///
-/// @return OK if success.
-/// FAIL if out of memory.
-static int hash_may_resize(hashtab_T *ht, size_t minitems)
+static void hash_may_resize(hashtab_T *ht, size_t minitems)
{
// Don't resize a locked table.
if (ht->ht_locked > 0) {
- return OK;
+ return;
}
#ifdef HT_DEBUG
@@ -276,7 +266,7 @@ static int hash_may_resize(hashtab_T *ht, size_t minitems)
// items are required for the lookup to decide a key isn't there.
if ((ht->ht_filled < HT_INIT_SIZE - 1)
&& (ht->ht_array == ht->ht_smallarray)) {
- return OK;
+ return;
}
// Grow or refill the array when it's more than 2/3 full (including
@@ -285,7 +275,7 @@ static int hash_may_resize(hashtab_T *ht, size_t minitems)
// at least 1/4 full (avoids repeated grow-shrink operations)
size_t oldsize = ht->ht_mask + 1;
if ((ht->ht_filled * 3 < oldsize * 2) && (ht->ht_used > oldsize / 5)) {
- return OK;
+ return;
}
if (ht->ht_used > 1000) {
@@ -309,10 +299,8 @@ static int hash_may_resize(hashtab_T *ht, size_t minitems)
while (newsize < minsize) {
// make sure it's always a power of 2
newsize <<= 1;
- if (newsize == 0) {
- // overflow
- return FAIL;
- }
+ // assert newsize didn't overflow
+ assert(newsize != 0);
}
bool newarray_is_small = newsize == HT_INIT_SIZE;
@@ -364,9 +352,6 @@ static int hash_may_resize(hashtab_T *ht, size_t minitems)
ht->ht_array = newarray;
ht->ht_mask = newmask;
ht->ht_filled = ht->ht_used;
- ht->ht_error = false;
-
- return OK;
}
/// Get the hash number for a key.