wangzhengquan
2020-07-14 8b4ddf10e71e1c8fabd33c72b282f7da65ff682f
queue/hashtable.c
@@ -2,6 +2,7 @@
#include "hashtable.h"
#include "mm.h"
#include "sem_util.h"
#include <set>
typedef struct tailq_entry_t
{
@@ -118,6 +119,10 @@
}
void hashtable_removeall(hashtable_t *hashtable)
{
  tailq_entry_t *item;
@@ -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;
}