Feature #755 ยป 0027-genhash.c-Replace-parameter-checking-fc_asserts-with.patch
utility/genhash.c | ||
---|---|---|
****************************************************************************/
|
||
void genhash_str_free_func(char *vkey)
|
||
{
|
||
#ifdef FREECIV_DEBUG
|
||
fc_assert_ret(vkey != nullptr);
|
||
#endif
|
||
free(vkey);
|
||
}
|
||
... | ... | |
****************************************************************************/
|
||
void genhash_destroy(struct genhash *pgenhash)
|
||
{
|
||
fc_assert_ret(pgenhash != nullptr);
|
||
pgenhash->no_shrink = TRUE;
|
||
genhash_clear(pgenhash);
|
||
free(pgenhash->buckets);
|
||
... | ... | |
{
|
||
bool old;
|
||
fc_assert_ret_val(pgenhash != nullptr, FALSE);
|
||
old = pgenhash->no_shrink;
|
||
pgenhash->no_shrink = no_shrink;
|
||
... | ... | |
****************************************************************************/
|
||
size_t genhash_size(const struct genhash *pgenhash)
|
||
{
|
||
fc_assert_ret_val(pgenhash != nullptr, 0);
|
||
return pgenhash->num_entries;
|
||
}
|
||
... | ... | |
****************************************************************************/
|
||
size_t genhash_capacity(const struct genhash *pgenhash)
|
||
{
|
||
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(pgenhash != nullptr, nullptr);
|
||
new_genhash = fc_malloc(sizeof(*new_genhash));
|
||
/* Copy fields. */
|
||
... | ... | |
{
|
||
struct genhash_entry **bucket, **end;
|
||
fc_assert_ret(pgenhash != nullptr);
|
||
bucket = pgenhash->buckets;
|
||
end = bucket + pgenhash->num_buckets;
|
||
for (; bucket < end; bucket++) {
|
||
... | ... | |
struct genhash_entry **slot;
|
||
genhash_val_t hash_val;
|
||
fc_assert_ret_val(pgenhash != nullptr, FALSE);
|
||
hash_val = genhash_val_calc(pgenhash, key);
|
||
slot = genhash_slot_lookup(pgenhash, key, hash_val);
|
||
if (*slot != nullptr) {
|
||
... | ... | |
struct genhash_entry **slot;
|
||
genhash_val_t hash_val;
|
||
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 (*slot != nullptr) {
|
||
... | ... | |
{
|
||
struct genhash_entry **slot;
|
||
fc_assert_action(pgenhash != nullptr,
|
||
genhash_default_get(nullptr, pdata); return FALSE);
|
||
slot = genhash_slot_lookup(pgenhash, key, genhash_val_calc(pgenhash, key));
|
||
if (*slot != nullptr) {
|
||
genhash_slot_get(slot, nullptr, pdata);
|
||
... | ... | |
{
|
||
struct genhash_entry **slot;
|
||
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 (*slot != nullptr) {
|
||
genhash_slot_get(slot, deleted_pkey, deleted_pdata);
|
||
genhash_slot_free(pgenhash, slot);
|
||
genhash_maybe_shrink(pgenhash);
|
||
fc_assert(0 < pgenhash->num_entries);
|
||
pgenhash->num_entries--;
|
||
return TRUE;
|
||
} else {
|
utility/genhash.h | ||
---|---|---|
bool genhash_str_comp_func(const char *vkey1, const char *vkey2);
|
||
/* and malloc'ed strings: */
|
||
char *genhash_str_copy_func(const char *vkey);
|
||
void genhash_str_free_func(char *vkey);
|
||
void genhash_str_free_func(char *vkey)
|
||
fc__attribute((nonnull (1)));
|
||
/* General functions: */
|
||
... | ... | |
genhash_free_fn_t data_free_func,
|
||
size_t nentries)
|
||
fc__warn_unused_result;
|
||
void genhash_destroy(struct genhash *pgenhash);
|
||
void genhash_destroy(struct genhash *pgenhash)
|
||
fc__attribute((nonnull (1)));
|
||
bool genhash_set_no_shrink(struct genhash *pgenhash, bool no_shrink);
|
||
size_t genhash_size(const struct genhash *pgenhash);
|
||
size_t genhash_capacity(const struct genhash *pgenhash);
|
||
bool genhash_set_no_shrink(struct genhash *pgenhash, bool no_shrink)
|
||
fc__attribute((nonnull (1)));
|
||
size_t genhash_size(const struct genhash *pgenhash)
|
||
fc__attribute((nonnull (1)));
|
||
size_t genhash_capacity(const struct genhash *pgenhash)
|
||
fc__attribute((nonnull (1)));
|
||
struct genhash *genhash_copy(const struct genhash *pgenhash)
|
||
fc__warn_unused_result;
|
||
void genhash_clear(struct genhash *pgenhash);
|
||
fc__attribute((nonnull (1)))
|
||
fc__warn_unused_result;
|
||
void genhash_clear(struct genhash *pgenhash)
|
||
fc__attribute((nonnull (1)));
|
||
bool genhash_insert(struct genhash *pgenhash, const void *key,
|
||
const void *data);
|
||
const void *data)
|
||
fc__attribute((nonnull (1)));
|
||
bool genhash_replace(struct genhash *pgenhash, const void *key,
|
||
const void *data);
|
||
bool genhash_replace_full(struct genhash *pgenhash, const void *key,
|
||
const void *data, void **old_pkey,
|
||
void **old_pdata);
|
||
void **old_pdata)
|
||
fc__attribute((nonnull (1)));
|
||
bool genhash_lookup(const struct genhash *pgenhash, const void *key,
|
||
void **pdata);
|
||
void **pdata)
|
||
fc__attribute((nonnull (1)));
|
||
bool genhash_remove(struct genhash *pgenhash, const void *key);
|
||
bool genhash_remove_full(struct genhash *pgenhash, const void *key,
|
||
void **deleted_pkey, void **deleted_pdata);
|
||
void **deleted_pkey, void **deleted_pdata)
|
||
fc__attribute((nonnull (1)));
|
||
bool genhashes_are_equal(const struct genhash *pgenhash1,
|
||
const struct genhash *pgenhash2);
|