wangzhengquan
2020-07-07 082633f08aae8eea19bd7050cbe4a75e5ed1ac6f
squeue/include/queue_factory.h
@@ -4,10 +4,11 @@
#include "mm.h"
#include "hashtable.h"
#include "lock_free_queue.h"
#include "SLinkedLockFreeQueue.h"
namespace QueueFactory{
   hashtable_t * getHashTable() {
class QueueFactory{
private:
   static hashtable_t * getHashTable() {
      static hashtable_t *hashtable = NULL;
      int first;
        
@@ -20,24 +21,9 @@
      
   }
   template <typename T>
   SLinkedLockFreeQueue<T>* createLinkedLockFreeQueue(int key, size_t size) {
      SLinkedLockFreeQueue<T> *queue;
      hashtable_t *hashtable = getHashTable();
      if ((queue = (SLinkedLockFreeQueue<T> *)hashtable_get(hashtable, key)) == NULL ) {
         queue = new SLinkedLockFreeQueue<T>(size);
         hashtable_put(hashtable,  key, (void *)queue);
      }
      return queue;
   }
   template <typename T>
   template <typename T> static
   LockFreeQueue<T>* createArrayLockFreeQueue(int key, size_t size=16) {
       
      LockFreeQueue<T> *queue;
@@ -51,8 +37,9 @@
      return queue;
   }
public:
   template <typename T>
   template <typename T> static
   LockFreeQueue<T>* createQueue(int key, size_t size = 16) {
      return QueueFactory::createArrayLockFreeQueue<T>(key, size);
   }
@@ -60,14 +47,13 @@
   /**
    * destroy queue
   */
   template <typename T>
   template <typename T> static
   void dropQueue(int key) {
      LockFreeQueue<T> *queue = QueueFactory::createQueue<T> (key);
      delete queue;
      hashtable_t *hashtable = getHashTable();
      hashtable_remove(hashtable, key);
   }
}
};
#endif