From 5854093bd0622c03576e7a29205d68bbdc264f62 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期四, 09 七月 2020 16:10:20 +0800
Subject: [PATCH] void queue wrapper

---
 queue/libshm_queue.a              |    0 
 /dev/null                         |   71 -----------
 test2/test_queue_wrapper          |    0 
 test/Makefile                     |    2 
 test2/test_queue_wrapper.c        |    9 
 queue/shm_queue_wrapper.c         |  138 +++++++++++++++++++++++
 queue/include/shm_queue_wrapper.h |   97 ++-------------
 README.md                         |    5 
 8 files changed, 160 insertions(+), 162 deletions(-)

diff --git a/README.md b/README.md
index 29dd32a..a174f32 100644
--- a/README.md
+++ b/README.md
@@ -49,6 +49,7 @@
 	return 0;
 }
 ```
+
 ## 鎺ュ彛璇存槑
 
 ```
@@ -110,7 +111,7 @@
 inline int shmqueue_push_nowait(shmqueue_t *shmqueue, void *src_ele) 
 
 /**
- * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆瀵逛笉鎴愬姛灏辫繑鍥�
+ * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆闃熶笉鎴愬姛灏辫繑鍥�
  */
 inline int shmqueue_push_timeout(shmqueue_t *shmqueue, void *src_ele, struct timespec * timeout) 
 /**
@@ -123,7 +124,7 @@
  */
 inline int shmqueue_pop_nowait(shmqueue_t *shmqueue, void *dest_ele) 
 /**
- * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭瀵逛笉鎴愬姛灏辫繑鍥�
+ * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭闃熶笉鎴愬姛灏辫繑鍥�
  */
 inline int shmqueue_pop_timeout(shmqueue_t *shmqueue, void *dest_ele, struct timespec * timeout)
 
diff --git a/queue/include/queue_factory.h b/queue/include/queue_factory.h
deleted file mode 100644
index 67537c6..0000000
--- a/queue/include/queue_factory.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// #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
diff --git a/queue/include/shm_queue_wrapper.h b/queue/include/shm_queue_wrapper.h
index ff918b6..1ceac9d 100644
--- a/queue/include/shm_queue_wrapper.h
+++ b/queue/include/shm_queue_wrapper.h
@@ -10,16 +10,7 @@
 extern "C" {
 #endif
 
-#define MAX_ELE_SIZE 512
-
-typedef struct ele_t {
-	char buf[MAX_ELE_SIZE];
-} ele_t;
-
-typedef struct shmqueue_t {
-	size_t ele_size;
-	void *mqueue;
-} shmqueue_t;
+ 
 
 /**
  * 鍒濆鍖�
@@ -28,114 +19,54 @@
  * @ queue_size 闃熷垪澶у皬
  * @ ele_size 闃熷垪涓厓绱犲ぇ灏�
  */
-inline void shmqueue_init(shmqueue_t *shmqueue, int key, int queue_size, int ele_size) {
-	if(ele_size > MAX_ELE_SIZE) {
-		err_exit(0, "shmqueue_init 鍏冪礌澶у皬瓒呰繃璁捐鐨勬渶澶уぇ灏�");
-	}
-	SHMQueue<ele_t> *queue = new SHMQueue<ele_t>(key, queue_size);
-	shmqueue->mqueue = (void *)queue;
-	shmqueue->ele_size = ele_size;
-}
-
-
-
+void* shmqueue_init(int key, int queue_size, int ele_size);
 /**
  * 閿�姣�
 */
-inline void shmqueue_destroy(shmqueue_t *shmqueue) {
-	delete (SHMQueue<ele_t> *)shmqueue->mqueue;
-}
-
+void shmqueue_destroy(void *shmqueue);
 /**
  * 闃熷垪鍏冪礌鐨勪釜鏁�
  */
-inline uint32_t shmqueue_size(shmqueue_t *shmqueue) {
-	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->size();
-}
-
+uint32_t shmqueue_size(void *shmqueue);
 /**
  * 鏄惁宸叉弧
  */
-inline int shmqueue_full(shmqueue_t *shmqueue) {
-	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->full();
-}
+int shmqueue_full(void *shmqueue);
 
 /**
  * 鏄惁涓虹┖
  */
-inline int shmqueue_empty(shmqueue_t *shmqueue) {
-	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->empty();
-}
+int shmqueue_empty(void *shmqueue);
 
 /**
  * 鍏ラ槦, 闃熷垪婊℃椂绛夊緟
  */
-inline int shmqueue_push(shmqueue_t *shmqueue, void *src_ele) {
-	ele_t dest_ele;
-	memcpy(&dest_ele.buf, src_ele, shmqueue->ele_size);
-	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push(dest_ele);
-}
+int shmqueue_push(void *shmqueue, void *src_ele);
 
 /**
  * 鍏ラ槦, 闃熷垪婊℃椂绔嬪嵆杩斿洖
  */
-inline int shmqueue_push_nowait(shmqueue_t *shmqueue, void *src_ele) {
-	ele_t dest_ele;
-	memcpy(&dest_ele.buf, src_ele, shmqueue->ele_size);
-	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push_nowait(dest_ele);
-}
+int shmqueue_push_nowait(void *shmqueue, void *src_ele);
 
 /**
- * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆瀵逛笉鎴愬姛灏辫繑鍥�
+ * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆闃熶笉鎴愬姛灏辫繑鍥�
  */
-inline int shmqueue_push_timeout(shmqueue_t *shmqueue, void *src_ele, struct timespec * timeout) {
-	ele_t dest_ele;
-	memcpy(&dest_ele.buf, src_ele, shmqueue->ele_size);
-	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push_timeout(dest_ele, timeout);
-}
+int shmqueue_push_timeout(void *shmqueue, void *src_ele, struct timespec * timeout);
 
 /**
  * 鍑洪槦, 闃熷垪绌烘椂绛夊緟
  */
-inline int shmqueue_pop(shmqueue_t *shmqueue, void *dest_ele) {
-	ele_t src_ele;
-	bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop(src_ele);
-	if (rv) {
-		memcpy(dest_ele, &src_ele.buf, shmqueue->ele_size);
-		return 1;
-	} else {
-		return 0;
-	}
-
-}
+int shmqueue_pop(void *shmqueue, void *dest_ele);
 
 /**
  * 鍑洪槦, 闃熷垪绌烘椂绔嬪嵆杩斿洖
  */
-inline int shmqueue_pop_nowait(shmqueue_t *shmqueue, void *dest_ele) {
-	ele_t src_ele;
-	bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_nowait(src_ele);
-	if (rv) {
-		memcpy(dest_ele, &src_ele.buf, shmqueue->ele_size);
-		return 1;
-	} else {
-		return 0;
-	}
-}
+int shmqueue_pop_nowait(void *shmqueue, void *dest_ele);
 
 /**
- * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭瀵逛笉鎴愬姛灏辫繑鍥�
+ * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭闃熶笉鎴愬姛灏辫繑鍥�
  */
-inline int shmqueue_pop_timeout(shmqueue_t *shmqueue, void *dest_ele, struct timespec * timeout) {
-	ele_t src_ele;
-	bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_timeout(src_ele, timeout);
-	if (rv) {
-		memcpy(dest_ele, &src_ele.buf, shmqueue->ele_size);
-		return 1;
-	} else {
-		return 0;
-	}
-}
+int shmqueue_pop_timeout(void *shmqueue, void *dest_ele, struct timespec * timeout);
 
 
 
diff --git a/queue/libshm_queue.a b/queue/libshm_queue.a
index bb19a8f..bcdcdd0 100644
--- a/queue/libshm_queue.a
+++ b/queue/libshm_queue.a
Binary files differ
diff --git a/queue/shm_queue_wrapper.c b/queue/shm_queue_wrapper.c
new file mode 100644
index 0000000..daa3f1e
--- /dev/null
+++ b/queue/shm_queue_wrapper.c
@@ -0,0 +1,138 @@
+#include "shm_queue_wrapper.h"
+#define MAX_ELE_SIZE 512
+
+typedef struct ele_t {
+	char buf[MAX_ELE_SIZE];
+} ele_t;
+
+typedef struct shmqueue_t {
+	size_t ele_size;
+	void *mqueue;
+} shmqueue_t;
+
+/**
+ * 鍒濆鍖�
+ * @ shmqueue 
+ * @ key 鏍囪瘑鍏变韩闃熷垪鐨勫敮涓�key
+ * @ queue_size 闃熷垪澶у皬
+ * @ ele_size 闃熷垪涓厓绱犲ぇ灏�
+ */
+void* shmqueue_init( int key, int queue_size, int ele_size) {
+	if(ele_size > MAX_ELE_SIZE) {
+		err_exit(0, "shmqueue_init : the element size is supper than max element buffer size");
+	}
+	shmqueue_t *shmqueue = (shmqueue_t*)malloc(sizeof(shmqueue_t));
+	SHMQueue<ele_t> *queue = new SHMQueue<ele_t>(key, queue_size);
+	shmqueue->mqueue = (void *)queue;
+	shmqueue->ele_size = ele_size;
+	return (void *)shmqueue;
+}
+
+/**
+ * 閿�姣�
+*/
+void shmqueue_destroy(void * _shmqueue) {
+	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
+	delete (SHMQueue<ele_t> *)shmqueue->mqueue;
+	delete _shmqueue;
+}
+
+/**
+ * 闃熷垪鍏冪礌鐨勪釜鏁�
+ */
+uint32_t shmqueue_size(void * _shmqueue) {
+	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
+	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->size();
+}
+
+/**
+ * 鏄惁宸叉弧
+ */
+int shmqueue_full(void * _shmqueue) {
+	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
+	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->full();
+}
+
+/**
+ * 鏄惁涓虹┖
+ */
+int shmqueue_empty(void * _shmqueue) {
+	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
+	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->empty();
+}
+
+/**
+ * 鍏ラ槦, 闃熷垪婊℃椂绛夊緟
+ */
+int shmqueue_push(void * _shmqueue, void *src_ele) {
+	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
+	ele_t dest_ele;
+	memcpy(&dest_ele.buf, src_ele, shmqueue->ele_size);
+	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push(dest_ele);
+}
+
+/**
+ * 鍏ラ槦, 闃熷垪婊℃椂绔嬪嵆杩斿洖
+ */
+int shmqueue_push_nowait(void * _shmqueue, void *src_ele) {
+	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
+	ele_t dest_ele;
+	memcpy(&dest_ele.buf, src_ele, shmqueue->ele_size);
+	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push_nowait(dest_ele);
+}
+
+/**
+ * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆闃熶笉鎴愬姛灏辫繑鍥�
+ */
+int shmqueue_push_timeout(void * _shmqueue, void *src_ele, struct timespec * timeout) {
+	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
+	ele_t dest_ele;
+	memcpy(&dest_ele.buf, src_ele, shmqueue->ele_size);
+	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push_timeout(dest_ele, timeout);
+}
+
+/**
+ * 鍑洪槦, 闃熷垪绌烘椂绛夊緟
+ */
+int shmqueue_pop(void * _shmqueue, void *dest_ele) {
+	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
+	ele_t src_ele;
+	bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop(src_ele);
+	if (rv) {
+		memcpy(dest_ele, &src_ele.buf, shmqueue->ele_size);
+		return 1;
+	} else {
+		return 0;
+	}
+
+}
+
+/**
+ * 鍑洪槦, 闃熷垪绌烘椂绔嬪嵆杩斿洖
+ */
+int shmqueue_pop_nowait(void * _shmqueue, void *dest_ele) {
+	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
+	ele_t src_ele;
+	bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_nowait(src_ele);
+	if (rv) {
+		memcpy(dest_ele, &src_ele.buf, shmqueue->ele_size);
+		return 1;
+	} else {
+		return 0;
+	}
+}
+
+/**
+ * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭闃熶笉鎴愬姛灏辫繑鍥�
+ */
+int shmqueue_pop_timeout(void * _shmqueue, void *dest_ele, struct timespec * timeout) {
+	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
+	ele_t src_ele;
+	bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_timeout(src_ele, timeout);
+	if (rv) {
+		memcpy(dest_ele, &src_ele.buf, shmqueue->ele_size);
+		return 1;
+	} else {
+		return 0;
+	}
+}
diff --git a/test/Makefile b/test/Makefile
index 00aeefc..5981739 100755
--- a/test/Makefile
+++ b/test/Makefile
@@ -14,7 +14,7 @@
 include $(ROOT)/Make.defines.$(PLATFORM)
 
  
-PROGS =	test_queue single_productor single_consumer multiple_queue_productor multiple_queue_consumer test_timeout test_queue_wrapper
+PROGS =	test_queue single_productor single_consumer multiple_queue_productor multiple_queue_consumer test_timeout
 
 
 build: $(PROGS)
diff --git a/test2/test_queue_wrapper b/test2/test_queue_wrapper
index 141be3f..d79dc5f 100755
--- a/test2/test_queue_wrapper
+++ b/test2/test_queue_wrapper
Binary files differ
diff --git a/test2/test_queue_wrapper.c b/test2/test_queue_wrapper.c
index ae242a4..a5020a7 100644
--- a/test2/test_queue_wrapper.c
+++ b/test2/test_queue_wrapper.c
@@ -13,14 +13,13 @@
 	int key = 2;
  
 	size_t qsize = 16;
-  	shmqueue_t queue;
-	shmqueue_init(&queue, key, qsize, sizeof(message_t));
+	void * queue = shmqueue_init( key, qsize, sizeof(message_t));
 	message_t item;
 	// LockFreeQueue<struct Item> queue(16);
 	for(i = 0; i < qsize; i++) {
 		sprintf(item.method, "hello"); 
 		item.code = i ; 
-		if(shmqueue_push(&queue, (void *)&item)) {
+		if(shmqueue_push(queue, (void *)&item)) {
 			  printf("push:%d %s\n", item.code, item.method );
 		}
 	}
@@ -28,14 +27,14 @@
 	struct timespec timeout = {1, 0};
 
 	i = 0;
-	while((shmqueue_pop_timeout(&queue, (void *)&item, &timeout)) ) {
+	while((shmqueue_pop_timeout(queue, (void *)&item, &timeout)) ) {
 	    printf("pop:%d %s\n", item.code, item.method );
 	   // cout <<  item.pic << endl;
 	    i++;
 	}
 
 	//閿�姣侀槦鍒�
-	shmqueue_destroy(&queue);
+	shmqueue_destroy(queue);
 }
 
  

--
Gitblit v1.8.0