From 8b4ddf10e71e1c8fabd33c72b282f7da65ff682f Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期二, 14 七月 2020 15:59:44 +0800 Subject: [PATCH] commit --- queue/hashtable.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 41 insertions(+), 2 deletions(-) diff --git a/queue/hashtable.c b/queue/hashtable.c index 35530df..629d2af 100755 --- a/queue/hashtable.c +++ b/queue/hashtable.c @@ -2,6 +2,7 @@ #include "hashtable.h" #include "mm.h" #include "sem_util.h" +#include <set> typedef struct tailq_entry_t { @@ -63,7 +64,7 @@ tailq_header_t *my_tailq_head = hashtable->array[code] ; if ( my_tailq_head == NULL) { - my_tailq_head = (tailq_header_t*) mm_malloc(sizeof(tailq_header_t )); + my_tailq_head = (tailq_header_t*) mm_malloc(sizeof(tailq_header_t )); TAILQ_INIT(my_tailq_head); hashtable->array[code] = my_tailq_head; goto putnew; @@ -117,6 +118,10 @@ return NULL; } + + + + void hashtable_removeall(hashtable_t *hashtable) { @@ -176,7 +181,7 @@ key++; } - //_hashtable_put(hashtable, key, (void *)1); + _hashtable_put(hashtable, key, (void *)1); SemUtil::inc(hashtable->wlock); return key; } @@ -224,3 +229,37 @@ //閲婃斁璇诲啓閿� SemUtil::inc(hashtable->wlock); } + + + +void hashtable_foreach(hashtable_t *hashtable, hashtable_foreach_cb cb) { + tailq_entry_t *item; + for (int i = 0; i < MAPSIZE; i++) { + tailq_header_t *my_tailq_head = hashtable->array[i] ; + + if (my_tailq_head == NULL ) + continue; + + TAILQ_FOREACH(item, my_tailq_head, joint) + { + cb(item->key, item -> value); + } + } +} + +std::set<int> * hashtable_keyset(hashtable_t *hashtable) { + std::set<int> *keyset = new std::set<int>; + tailq_entry_t *item; + for (int i = 0; i < MAPSIZE; i++) { + tailq_header_t *my_tailq_head = hashtable->array[i] ; + + if (my_tailq_head == NULL ) + continue; + + TAILQ_FOREACH(item, my_tailq_head, joint) + { + keyset->insert(item->key); + } + } + return keyset; +} \ No newline at end of file -- Gitblit v1.8.0