From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomas Vestelind Subject: [PATCH] hash: added rte_hash_clear that clears all keys Date: Tue, 12 Aug 2014 23:47:57 +0200 Message-ID: <1407880077-15038-1-git-send-email-tomas.vestelind@gmail.com> To: dev-VfR2kkLFssw@public.gmane.org Return-path: List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-VfR2kkLFssw@public.gmane.org Sender: "dev" I added rte_hash_clear which clear the map from all previously added keys. Signed-off-by: Tomas Vestelind --- lib/librte_hash/rte_hash.c | 14 ++++++++++++++ lib/librte_hash/rte_hash.h | 10 ++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib/librte_hash/rte_hash.c b/lib/librte_hash/rte_hash.c index 2108c4f..917a6c1 100644 --- a/lib/librte_hash/rte_hash.c +++ b/lib/librte_hash/rte_hash.c @@ -507,3 +507,17 @@ rte_hash_keys(const struct rte_hash *h, void *keys) return found_keys; } + +void +rte_hash_clear(const struct rte_hash *h) +{ + unsigned int bucket, entry; + + /* Clear all entries by invalidating each signature */ + for (bucket = 0; bucket < h->num_buckets; bucket++) { + hash_sig_t *sig = get_sig_tbl_bucket(h, bucket); + for (entry = 0; entry < h->bucket_entries; entry++) { + sig[entry] = NULL_SIGNATURE; + } + } +} diff --git a/lib/librte_hash/rte_hash.h b/lib/librte_hash/rte_hash.h index e0fb28f..b84137e 100644 --- a/lib/librte_hash/rte_hash.h +++ b/lib/librte_hash/rte_hash.h @@ -318,6 +318,16 @@ rte_hash_lookup_bulk(const struct rte_hash *h, const void **keys, */ unsigned int rte_hash_keys(const struct rte_hash *h, void *keys); + +/** + * Clear all keys. This operation is not multi-thread safe and should only be + * called from one thread. + * + * @param h + * Hash table to clear. + */ +void +rte_hash_clear(const struct rte_hash *h); #ifdef __cplusplus } #endif -- 1.7.10.4