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/include/shm_queue.h | 29 +++++++++++++++++++++++++++++ 1 files changed, 29 insertions(+), 0 deletions(-) diff --git a/queue/include/shm_queue.h b/queue/include/shm_queue.h index 93bd7dc..3a506c9 100644 --- a/queue/include/shm_queue.h +++ b/queue/include/shm_queue.h @@ -39,6 +39,10 @@ inline ELEM_T& operator[](unsigned i); + static void remove_queues_exclue(int *keys, size_t length); +private: + + protected: /// @brief the actual queue-> methods are forwarded into the real /// implementation @@ -51,6 +55,31 @@ template < typename ELEM_T > +void SHMQueue<ELEM_T>::remove_queues_exclue(int *keys, size_t length) +{ + hashtable_t *hashtable = mm_get_hashtable(); + std::set<int>* keyset = hashtable_keyset(hashtable); + std::set<int>::iterator keyItr; + LockFreeQueue<ELEM_T>* mqueue; + bool found; + for (keyItr = keyset->begin(); keyItr != keyset->end(); keyItr++) { + found = false; + for(int i = 0; i < length; i++) { + if(*keyItr == keys[i]) { + found = true; + break; + } + } + if(!found) { + mqueue = (LockFreeQueue<ELEM_T> *)hashtable_get(hashtable, *keyItr); + delete mqueue; + } + } + delete keyset; + +} + +template < typename ELEM_T > SHMQueue<ELEM_T>::SHMQueue(int key, size_t qsize): KEY(key) { -- Gitblit v1.8.0