| | |
| | | #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; |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | 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; |
| | |
| | | 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); |
| | | } |
| | |
| | | /** |
| | | * 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 |