diff options
author | Luo Jinghua <sunmoon1997@gmail.com> | 2009-10-31 14:54:45 +0800 |
---|---|---|
committer | Luo Jinghua <sunmoon1997@gmail.com> | 2009-10-31 14:54:45 +0800 |
commit | 1cc5b3b0ae5f6b5bf3d7bb1f2c81611e7dd278ea (patch) | |
tree | 1404f090e085e1732f8f68fc7bc9cea5f740a480 | |
parent | 518a016087b0bd94a890837220277bed6cb545fe (diff) |
milkway: improvements for hash table
-rw-r--r-- | milkway/mw-hash.c | 18 | ||||
-rw-r--r-- | milkway/mw-hash.h | 19 |
2 files changed, 27 insertions, 10 deletions
diff --git a/milkway/mw-hash.c b/milkway/mw-hash.c index 86c0497..9a70cf6 100644 --- a/milkway/mw-hash.c +++ b/milkway/mw-hash.c @@ -431,23 +431,23 @@ mw_hash_take (mw_hash_t * hash, return MW_TRUE; } -mw_bool_t +mw_hash_iter_t* mw_hash_first(mw_hash_t *hash, mw_hash_iter_t *iter) { if (!hash->num_buckets) - return MW_FALSE; + return NULL; for (iter->pos = 0; iter->pos < hash->size; iter->pos++) if (hash->buckets[iter->pos]) { iter->key = hash->buckets[iter->pos]->key; iter->value = hash->buckets[iter->pos]->value; - return MW_TRUE; + return iter; } return MW_FALSE; } -mw_bool_t +mw_hash_iter_t* mw_hash_next(mw_hash_t *hash, mw_hash_iter_t *iter) { iter->pos++; @@ -455,10 +455,16 @@ mw_hash_next(mw_hash_t *hash, mw_hash_iter_t *iter) if (hash->buckets[iter->pos]) { iter->key = hash->buckets[iter->pos]->key; iter->value = hash->buckets[iter->pos]->value; - return MW_TRUE; + return iter; } - return MW_FALSE; + return NULL; +} + +size_t +mw_hash_get_size(mw_hash_t *hash) +{ + return hash->num_buckets; } static void diff --git a/milkway/mw-hash.h b/milkway/mw-hash.h index 27dc3d7..0449c8d 100644 --- a/milkway/mw-hash.h +++ b/milkway/mw-hash.h @@ -158,9 +158,9 @@ mw_hash_clear (mw_hash_t * hash); * @param hash the hash table * @param iter the hash table iterator * - * @return MW_TRUE, if the iter is set to the first element + * @return the iter, if the iter is set to the first element */ -mw_public mw_bool_t +mw_public mw_hash_iter_t* mw_hash_first(mw_hash_t *hash, mw_hash_iter_t *iter); /** @@ -169,11 +169,22 @@ mw_hash_first(mw_hash_t *hash, mw_hash_iter_t *iter); * @param hash the hash table * @param iter the hash table iterator * - * @return MW_TRUE, if the iter is set to next element + * @return the iter, if the iter is set to next element */ -mw_public mw_bool_t +mw_public mw_hash_iter_t* mw_hash_next(mw_hash_t *hash, mw_hash_iter_t *iter); +/** + * @brief get number of elements in hash table + * + * @param hash the hash table + * @param iter the hash table iterator + * + * @return the iter, if the iter is set to next element + */ +mw_public size_t +mw_hash_get_size(mw_hash_t *hash); + MW_END_DECLS |