Project

General

Profile

Feature #756 ยป 0024-genhash.c-Replace-NULLs-with-nullptrs.patch

Marko Lindqvist, 07/08/2024 10:45 PM

View differences:

utility/genhash.c
****************************************************************************/
char *genhash_str_copy_func(const char *vkey)
{
return fc_strdup(NULL != vkey ? vkey : "");
return fc_strdup(vkey != nullptr ? vkey : "");
}
/************************************************************************//**
......
void genhash_str_free_func(char *vkey)
{
#ifdef FREECIV_DEBUG
fc_assert_ret(NULL != vkey);
fc_assert_ret(vkey != nullptr);
#endif
free(vkey);
}
......
size_t nentries)
{
return genhash_new_nbuckets(key_val_func, key_comp_func,
NULL, NULL, NULL, NULL,
nullptr, nullptr, nullptr, nullptr,
genhash_calc_num_buckets(nentries));
}
......
genhash_comp_fn_t key_comp_func)
{
return genhash_new_nbuckets(key_val_func, key_comp_func,
NULL, NULL, NULL, NULL, MIN_BUCKETS);
nullptr, nullptr, nullptr, nullptr, MIN_BUCKETS);
}
/************************************************************************//**
......
****************************************************************************/
void genhash_destroy(struct genhash *pgenhash)
{
fc_assert_ret(NULL != pgenhash);
fc_assert_ret(pgenhash != nullptr);
pgenhash->no_shrink = TRUE;
genhash_clear(pgenhash);
free(pgenhash->buckets);
......
bucket = pgenhash->buckets;
end = bucket + pgenhash->num_buckets;
for (; bucket < end; bucket++) {
for (iter = *bucket; NULL != iter; iter = next) {
for (iter = *bucket; iter != nullptr; iter = next) {
slot = new_buckets + (iter->hash_val % new_nbuckets);
next = iter->next;
iter->next = *slot;
......
static inline genhash_val_t genhash_val_calc(const struct genhash *pgenhash,
const void *key)
{
if (NULL != pgenhash->key_val_func) {
if (pgenhash->key_val_func != nullptr) {
return pgenhash->key_val_func(key);
} else {
return ((intptr_t) key);
......
genhash_comp_fn_t key_comp_func = pgenhash->key_comp_func;
slot = pgenhash->buckets + (hash_val % pgenhash->num_buckets);
if (NULL != key_comp_func) {
for (; NULL != *slot; slot = &(*slot)->next) {
if (key_comp_func != nullptr) {
for (; *slot != nullptr; slot = &(*slot)->next) {
if (hash_val == (*slot)->hash_val
&& key_comp_func((*slot)->key, key)) {
return slot;
}
}
} else {
for (; NULL != *slot; slot = &(*slot)->next) {
for (; *slot != nullptr; slot = &(*slot)->next) {
if (key == (*slot)->key) {
return slot;
}
......
****************************************************************************/
static inline void genhash_default_get(void **pkey, void **data)
{
if (NULL != pkey) {
*pkey = NULL;
if (pkey != nullptr) {
*pkey = nullptr;
}
if (NULL != data) {
*data = NULL;
if (data != nullptr) {
*data = nullptr;
}
}
......
{
const struct genhash_entry *entry = *slot;
if (NULL != pkey) {
if (pkey != nullptr) {
*pkey = entry->key;
}
if (NULL != data) {
if (data != nullptr) {
*data = entry->data;
}
}
......
{
struct genhash_entry *entry = fc_malloc(sizeof(*entry));
entry->key = (NULL != pgenhash->key_copy_func
entry->key = (pgenhash->key_copy_func != nullptr
? pgenhash->key_copy_func(key) : (void *) key);
entry->data = (NULL != pgenhash->data_copy_func
entry->data = (pgenhash->data_copy_func != nullptr
? pgenhash->data_copy_func(data) : (void *) data);
entry->hash_val = hash_val;
entry->next = *slot;
......
{
struct genhash_entry *entry = *slot;
if (NULL != pgenhash->key_free_func) {
if (pgenhash->key_free_func != nullptr) {
pgenhash->key_free_func(entry->key);
}
if (NULL != pgenhash->data_free_func) {
if (pgenhash->data_free_func != nullptr) {
pgenhash->data_free_func(entry->data);
}
*slot = entry->next;
free(entry);
}
......
{
struct genhash_entry *entry = *slot;
if (NULL != pgenhash->key_free_func) {
if (pgenhash->key_free_func != nullptr) {
pgenhash->key_free_func(entry->key);
}
if (NULL != pgenhash->data_free_func) {
if (pgenhash->data_free_func != nullptr) {
pgenhash->data_free_func(entry->data);
}
entry->key = (NULL != pgenhash->key_copy_func
entry->key = (pgenhash->key_copy_func != nullptr
? pgenhash->key_copy_func(key) : (void *) key);
entry->data = (NULL != pgenhash->data_copy_func
entry->data = (pgenhash->data_copy_func != nullptr
? pgenhash->data_copy_func(data) : (void *) data);
}
......
{
bool old;
fc_assert_ret_val(NULL != pgenhash, FALSE);
fc_assert_ret_val(pgenhash != nullptr, FALSE);
old = pgenhash->no_shrink;
pgenhash->no_shrink = no_shrink;
return old;
}
......
****************************************************************************/
size_t genhash_size(const struct genhash *pgenhash)
{
fc_assert_ret_val(NULL != pgenhash, 0);
fc_assert_ret_val(pgenhash != nullptr, 0);
return pgenhash->num_entries;
}
......
****************************************************************************/
size_t genhash_capacity(const struct genhash *pgenhash)
{
fc_assert_ret_val(NULL != pgenhash, 0);
fc_assert_ret_val(pgenhash != nullptr, 0);
return pgenhash->num_buckets;
}
......
const struct genhash_entry *src_iter;
struct genhash_entry **dest_slot, **dest_bucket;
fc_assert_ret_val(NULL != pgenhash, NULL);
fc_assert_ret_val(pgenhash != nullptr, nullptr);
new_genhash = fc_malloc(sizeof(*new_genhash));
......
for (; src_bucket < end; src_bucket++, dest_bucket++) {
dest_slot = dest_bucket;
for (src_iter = *src_bucket; NULL != src_iter;
for (src_iter = *src_bucket; src_iter != nullptr;
src_iter = src_iter->next) {
genhash_slot_create(new_genhash, dest_slot, src_iter->key,
src_iter->data, src_iter->hash_val);
......
{
struct genhash_entry **bucket, **end;
fc_assert_ret(NULL != pgenhash);
fc_assert_ret(pgenhash != nullptr);
bucket = pgenhash->buckets;
end = bucket + pgenhash->num_buckets;
for (; bucket < end; bucket++) {
while (NULL != *bucket) {
while (*bucket != nullptr) {
genhash_slot_free(pgenhash, bucket);
}
}
......
struct genhash_entry **slot;
genhash_val_t hash_val;
fc_assert_ret_val(NULL != pgenhash, FALSE);
fc_assert_ret_val(pgenhash != nullptr, FALSE);
hash_val = genhash_val_calc(pgenhash, key);
slot = genhash_slot_lookup(pgenhash, key, hash_val);
if (NULL != *slot) {
if (*slot != nullptr) {
return FALSE;
} else {
if (genhash_maybe_expand(pgenhash)) {
......
bool genhash_replace(struct genhash *pgenhash, const void *key,
const void *data)
{
return genhash_replace_full(pgenhash, key, data, NULL, NULL);
return genhash_replace_full(pgenhash, key, data, nullptr, nullptr);
}
/************************************************************************//**
......
insertion.
Returns in 'old_pkey' and 'old_pdata' the old content of the bucket if
they are not NULL. NB: It can returns freed pointers if free functions
they are not nullptr. NB: It can returns freed pointers if free functions
were supplied to the genhash table.
****************************************************************************/
bool genhash_replace_full(struct genhash *pgenhash, const void *key,
......
struct genhash_entry **slot;
genhash_val_t hash_val;
fc_assert_action(NULL != pgenhash,
fc_assert_action(pgenhash != nullptr,
genhash_default_get(old_pkey, old_pdata); return FALSE);
hash_val = genhash_val_calc(pgenhash, key);
slot = genhash_slot_lookup(pgenhash, key, hash_val);
if (NULL != *slot) {
if (*slot != nullptr) {
/* Replace. */
genhash_slot_get(slot, old_pkey, old_pdata);
genhash_slot_set(pgenhash, slot, key, data);
......
}
/************************************************************************//**
Lookup data. Return TRUE on success, then pdata - if not NULL will be set
Lookup data. Return TRUE on success, then pdata - if not nullptr will be set
to the data value.
****************************************************************************/
bool genhash_lookup(const struct genhash *pgenhash, const void *key,
......
{
struct genhash_entry **slot;
fc_assert_action(NULL != pgenhash,
genhash_default_get(NULL, pdata); return FALSE);
fc_assert_action(pgenhash != nullptr,
genhash_default_get(nullptr, pdata); return FALSE);
slot = genhash_slot_lookup(pgenhash, key, genhash_val_calc(pgenhash, key));
if (NULL != *slot) {
genhash_slot_get(slot, NULL, pdata);
if (*slot != nullptr) {
genhash_slot_get(slot, nullptr, pdata);
return TRUE;
} else {
genhash_default_get(NULL, pdata);
genhash_default_get(nullptr, pdata);
return FALSE;
}
}
......
****************************************************************************/
bool genhash_remove(struct genhash *pgenhash, const void *key)
{
return genhash_remove_full(pgenhash, key, NULL, NULL);
return genhash_remove_full(pgenhash, key, nullptr, nullptr);
}
/************************************************************************//**
Delete an entry from the genhash table. Returns TRUE on success.
Returns in 'deleted_pkey' and 'deleted_pdata' the old contents of the
deleted entry if not NULL. NB: It can returns freed pointers if free
deleted entry if not nullptr. NB: It can returns freed pointers if free
functions were supplied to the genhash table.
****************************************************************************/
bool genhash_remove_full(struct genhash *pgenhash, const void *key,
......
{
struct genhash_entry **slot;
fc_assert_action(NULL != pgenhash,
fc_assert_action(pgenhash != nullptr,
genhash_default_get(deleted_pkey, deleted_pdata);
return FALSE);
slot = genhash_slot_lookup(pgenhash, key, genhash_val_calc(pgenhash, key));
if (NULL != *slot) {
if (*slot != nullptr) {
genhash_slot_get(slot, deleted_pkey, deleted_pdata);
genhash_slot_free(pgenhash, slot);
genhash_maybe_shrink(pgenhash);
......
bool genhashes_are_equal(const struct genhash *pgenhash1,
const struct genhash *pgenhash2)
{
return genhashes_are_equal_full(pgenhash1, pgenhash2, NULL);
return genhashes_are_equal_full(pgenhash1, pgenhash2, nullptr);
}
/************************************************************************//**
......
/* Check pointers. */
if (pgenhash1 == pgenhash2) {
return TRUE;
} else if (NULL == pgenhash1 || NULL == pgenhash2) {
} else if (pgenhash1 == nullptr || pgenhash2 == nullptr) {
return FALSE;
}
......
bucket1 = pgenhash1->buckets;
max1 = bucket1 + pgenhash1->num_buckets;
for (; bucket1 < max1; bucket1++) {
for (iter1 = *bucket1; NULL != iter1; iter1 = iter1->next) {
for (iter1 = *bucket1; iter1 != nullptr; iter1 = iter1->next) {
slot2 = genhash_slot_lookup(pgenhash2, iter1->key, iter1->hash_val);
if (NULL == *slot2
if (*slot2 == nullptr
|| (iter1->data != (*slot2)->data
&& (NULL == data_comp_func
&& (data_comp_func == nullptr
|| !data_comp_func(iter1->data, (*slot2)->data)))) {
return FALSE;
}
......
struct genhash_iter *iter = GENHASH_ITER(genhash_iter);
iter->iterator = iter->iterator->next;
if (NULL != iter->iterator) {
if (iter->iterator != nullptr) {
return;
}
for (iter->bucket++; iter->bucket < iter->end; iter->bucket++) {
if (NULL != *iter->bucket) {
if (*iter->bucket != nullptr) {
iter->iterator = *iter->bucket;
return;
}
......
const struct genhash *pgenhash,
void * (*get) (const struct iterator *))
{
if (NULL == pgenhash) {
if (pgenhash == nullptr) {
return invalid_iter_init(ITERATOR(iter));
}
......
/* Seek to the first used bucket. */
for (; iter->bucket < iter->end; iter->bucket++) {
if (NULL != *iter->bucket) {
if (*iter->bucket != nullptr) {
iter->iterator = *iter->bucket;
break;
}
    (1-1/1)