// #ifndef QFACTORY_H
|
// #define QFACTORY_H
|
// #include "usg_common.h"
|
// #include "mm.h"
|
// #include "hashtable.h"
|
// #include "lock_free_queue.h"
|
|
// class QueueFactory{
|
|
// private:
|
|
// static hashtable_t * getHashTable() {
|
// static hashtable_t *hashtable = NULL;
|
// int first;
|
|
// if(hashtable == NULL) {
|
// first = mm_init(sizeof(hashtable_t), (void **)&hashtable);
|
// if (first)
|
// hashtable_init(hashtable);
|
// }
|
// return hashtable;
|
|
// }
|
|
|
// template <typename T> static
|
// LockFreeQueue<T>* _createQueue(int key, size_t size = 16) {
|
// LockFreeQueue<T> *queue;
|
// hashtable_t *hashtable = getHashTable();
|
// //LockFreeQueue<int, 10000> q;
|
// if ((queue = (LockFreeQueue<T> *)hashtable_get(hashtable, key)) == NULL ) {
|
// queue = new LockFreeQueue<T>(size);
|
// hashtable_put(hashtable, key, (void *)queue);
|
// }
|
|
|
// return queue;
|
// }
|
|
|
// public:
|
|
// template <typename T> static
|
// LockFreeQueue<T>* createQueue(int key, size_t size = 16) {
|
// LockFreeQueue<T> *queue = _createQueue<T>(key, size);
|
// queue->reference++;
|
// LoggerFactory::getLogger().debug("createQueue reference===%d", queue->reference.load());
|
// return queue;
|
// }
|
|
// /**
|
// * destroy queue
|
// */
|
// template <typename T> static
|
// void dropQueue(int key) {
|
// LockFreeQueue<T> *queue = _createQueue<T> (key);
|
// if(queue == NULL)
|
// return;
|
|
// queue->reference--;
|
// LoggerFactory::getLogger().debug("dropQueue reference===%d", queue->reference.load());
|
// if(queue->reference == 0) {
|
// delete queue;
|
// hashtable_t *hashtable = getHashTable();
|
// hashtable_remove(hashtable, key);
|
// }
|
|
// }
|
|
// };
|
// #endif
|