*/
struct _virHashTable {
virHashEntryPtr *table;
- int size;
- int nbElems;
+ size_t size;
+ size_t nbElems;
/* True iff we are iterating over hash entries. */
bool iterating;
/* Pointer to the current entry during iteration. */
virHashKeyFree keyFree;
};
-static unsigned long virHashStrCode(const void *name)
+static uint32_t virHashStrCode(const void *name)
{
const char *str = name;
- unsigned long value = 0L;
+ uint32_t value = 0L;
char ch;
if (str != NULL) {
value += 30 * (*str);
while ((ch = *str++) != 0) {
value =
- value ^ ((value << 5) + (value >> 3) + (unsigned long) ch);
+ value ^ ((value << 5) + (value >> 3) + (uint32_t) ch);
}
}
return value;
}
-static unsigned long
+static size_t
virHashComputeKey(virHashTablePtr table, const void *name)
{
- unsigned long value = table->keyCode(name);
+ uint32_t value = table->keyCode(name);
return (value % table->size);
}
*
* Returns the newly created object, or NULL if an error occurred.
*/
-virHashTablePtr virHashCreateFull(int size,
+virHashTablePtr virHashCreateFull(ssize_t size,
virHashDataFree dataFree,
virHashKeyCode keyCode,
virHashKeyEqual keyEqual,
*
* Returns the newly created object, or NULL if an error occurred.
*/
-virHashTablePtr virHashCreate(int size, virHashDataFree dataFree)
+virHashTablePtr virHashCreate(ssize_t size, virHashDataFree dataFree)
{
return virHashCreateFull(size,
dataFree,
* Returns 0 in case of success, -1 in case of failure
*/
static int
-virHashGrow(virHashTablePtr table, int size)
+virHashGrow(virHashTablePtr table, size_t size)
{
- int oldsize, i;
+ size_t oldsize, i;
virHashEntryPtr *oldtable;
#ifdef DEBUG_GROW
- unsigned long nbElem = 0;
+ size_t nbElem = 0;
#endif
if (table == NULL)
virHashEntryPtr iter = oldtable[i];
while (iter) {
virHashEntryPtr next = iter->next;
- unsigned long key = virHashComputeKey(table, iter->name);
+ size_t key = virHashComputeKey(table, iter->name);
iter->next = table->table[key];
table->table[key] = iter;
void
virHashFree(virHashTablePtr table)
{
- int i;
+ size_t i;
if (table == NULL)
return;
void *userdata,
bool is_update)
{
- unsigned long key, len = 0;
+ size_t key, len = 0;
virHashEntryPtr entry;
char *new_name;
void *
virHashLookup(virHashTablePtr table, const void *name)
{
- unsigned long key;
+ size_t key;
virHashEntryPtr entry;
if (!table || !name)
* Returns the number of elements in the hash table or
* -1 in case of error
*/
-int
+ssize_t
virHashSize(virHashTablePtr table)
{
if (table == NULL)
* Returns the number of keys in the hash table or
* -1 in case of error
*/
-int
+ssize_t
virHashTableSize(virHashTablePtr table)
{
if (table == NULL)
*
* Returns number of items iterated over upon completion, -1 on failure
*/
-int virHashForEach(virHashTablePtr table, virHashIterator iter, void *data)
+ssize_t
+virHashForEach(virHashTablePtr table, virHashIterator iter, void *data)
{
- int i, count = 0;
+ size_t i, count = 0;
if (table == NULL || iter == NULL)
return (-1);
*
* Returns number of items removed on success, -1 on failure
*/
-int virHashRemoveSet(virHashTablePtr table,
- virHashSearcher iter,
- const void *data)
+ssize_t
+virHashRemoveSet(virHashTablePtr table,
+ virHashSearcher iter,
+ const void *data)
{
- int i, count = 0;
+ size_t i, count = 0;
if (table == NULL || iter == NULL)
return (-1);
virHashSearcher iter,
const void *data)
{
- int i;
+ size_t i;
if (table == NULL || iter == NULL)
return (NULL);
struct getKeysIter
{
virHashKeyValuePair *sortArray;
- unsigned arrayIdx;
+ size_t arrayIdx;
};
static void virHashGetKeysIterator(void *payload,
virHashKeyValuePairPtr virHashGetItems(virHashTablePtr table,
virHashKeyComparator compar)
{
- int numElems = virHashSize(table);
+ ssize_t numElems = virHashSize(table);
struct getKeysIter iter = {
.arrayIdx = 0,
.sortArray = NULL,
*
* Returns the hash code
*/
-typedef unsigned long (*virHashKeyCode)(const void *name);
+typedef uint32_t (*virHashKeyCode)(const void *name);
/**
* virHashKeyEqual:
* @namea: the first hash key
/*
* Constructor and destructor.
*/
-virHashTablePtr virHashCreate(int size,
+virHashTablePtr virHashCreate(ssize_t size,
virHashDataFree dataFree);
-virHashTablePtr virHashCreateFull(int size,
+virHashTablePtr virHashCreateFull(ssize_t size,
virHashDataFree dataFree,
virHashKeyCode keyCode,
virHashKeyEqual keyEqual,
virHashKeyCopy keyCopy,
virHashKeyFree keyFree);
void virHashFree(virHashTablePtr table);
-int virHashSize(virHashTablePtr table);
-int virHashTableSize(virHashTablePtr table);
+ssize_t virHashSize(virHashTablePtr table);
+ssize_t virHashTableSize(virHashTablePtr table);
/*
* Add a new entry to the hash table.
/*
* Iterators
*/
-int virHashForEach(virHashTablePtr table, virHashIterator iter, void *data);
-int virHashRemoveSet(virHashTablePtr table, virHashSearcher iter, const void *data);
+ssize_t virHashForEach(virHashTablePtr table, virHashIterator iter, void *data);
+ssize_t virHashRemoveSet(virHashTablePtr table, virHashSearcher iter, const void *data);
void *virHashSearch(virHashTablePtr table, virHashSearcher iter, const void *data);
#endif /* ! __VIR_HASH_H__ */
testHashInit(int size)
{
virHashTablePtr hash;
- int i;
+ ssize_t i;
if (!(hash = virHashCreate(size, NULL)))
return NULL;
* collision list in the same order as in the uuids array
*/
for (i = ARRAY_CARDINALITY(uuids) - 1; i >= 0; i--) {
- int oldsize = virHashTableSize(hash);
+ ssize_t oldsize = virHashTableSize(hash);
if (virHashAddEntry(hash, uuids[i], (void *) uuids[i]) < 0) {
virHashFree(hash);
return NULL;
}
if (virHashTableSize(hash) != oldsize && virTestGetDebug()) {
- fprintf(stderr, "\nhash grown from %d to %d",
+ fprintf(stderr, "\nhash grown from %zd to %zd",
oldsize, virHashTableSize(hash));
}
}
}
static int
-testHashCheckCount(virHashTablePtr hash, int count)
+testHashCheckCount(virHashTablePtr hash, size_t count)
{
- int iter_count = 0;
+ ssize_t iter_count = 0;
if (virHashSize(hash) != count) {
- testError("\nhash contains %d instead of %d elements\n",
+ testError("\nhash contains %zd instead of %zu elements\n",
virHashSize(hash), count);
return -1;
}
iter_count = virHashForEach(hash, testHashCheckForEachCount, NULL);
if (count != iter_count) {
- testError("\nhash claims to have %d elements but iteration finds %d\n",
+ testError("\nhash claims to have %zu elements but iteration finds %zd\n",
count, iter_count);
return -1;
}
struct testInfo {
void *data;
- int count;
+ size_t count;
};