[Bf-blender-cvs] [9c17284] master: BLI_gsqueue: refactor to use zero length array

Campbell Barton noreply at git.blender.org
Sat Jun 14 20:33:52 CEST 2014


Commit: 9c1728457b3f2c3e6a575bd806aaaf7a118c82cc
Author: Campbell Barton
Date:   Sun Jun 15 04:30:32 2014 +1000
https://developer.blender.org/rB9c1728457b3f2c3e6a575bd806aaaf7a118c82cc

BLI_gsqueue: refactor to use zero length array

===================================================================

M	source/blender/blenlib/BLI_gsqueue.h
M	source/blender/blenlib/intern/gsqueue.c

===================================================================

diff --git a/source/blender/blenlib/BLI_gsqueue.h b/source/blender/blenlib/BLI_gsqueue.h
index f7c6698..d17897d 100644
--- a/source/blender/blenlib/BLI_gsqueue.h
+++ b/source/blender/blenlib/BLI_gsqueue.h
@@ -39,10 +39,10 @@ typedef struct _GSQueue GSQueue;
 GSQueue    *BLI_gsqueue_new(size_t elem_size);
 bool        BLI_gsqueue_is_empty(GSQueue *gq);
 int         BLI_gsqueue_size(GSQueue *gq);
-void        BLI_gsqueue_peek(GSQueue *gq, void *item_r);
-void        BLI_gsqueue_pop(GSQueue *gq, void *item_r);
-void        BLI_gsqueue_push(GSQueue *gq, void *item);
-void        BLI_gsqueue_pushback(GSQueue *gq, void *item);
+void        BLI_gsqueue_peek(GSQueue *gq, void *r_item);
+void        BLI_gsqueue_pop(GSQueue *gq, void *r_item);
+void        BLI_gsqueue_push(GSQueue *gq, const void *item);
+void        BLI_gsqueue_pushback(GSQueue *gq, const void *item);
 void        BLI_gsqueue_free(GSQueue *gq);
 
 #endif /* __BLI_GSQUEUE_H__ */
diff --git a/source/blender/blenlib/intern/gsqueue.c b/source/blender/blenlib/intern/gsqueue.c
index 72f3008..67703c3 100644
--- a/source/blender/blenlib/intern/gsqueue.c
+++ b/source/blender/blenlib/intern/gsqueue.c
@@ -40,6 +40,7 @@
 typedef struct _GSQueueElem GSQueueElem;
 struct _GSQueueElem {
 	GSQueueElem *next;
+	char data[0];
 };
 
 struct _GSQueue {
@@ -92,9 +93,9 @@ int BLI_gsqueue_size(GSQueue *gq)
  * \param item_r A pointer to an appropriately
  * sized structure (the size passed to BLI_gsqueue_new)
  */
-void BLI_gsqueue_peek(GSQueue *gq, void *item_r)
+void BLI_gsqueue_peek(GSQueue *gq, void *r_item)
 {
-	memcpy(item_r, &gq->head[1], gq->elem_size);
+	memcpy(r_item, &gq->head->data, gq->elem_size);
 }
 
 /**
@@ -105,7 +106,7 @@ void BLI_gsqueue_peek(GSQueue *gq, void *item_r)
  * sized structure (the size passed to BLI_gsqueue_new).
  * Can be NULL if desired.
  */
-void BLI_gsqueue_pop(GSQueue *gq, void *item_r)
+void BLI_gsqueue_pop(GSQueue *gq, void *r_item)
 {
 	GSQueueElem *elem = gq->head;
 	if (elem == gq->tail) {
@@ -115,7 +116,9 @@ void BLI_gsqueue_pop(GSQueue *gq, void *item_r)
 		gq->head = gq->head->next;
 	}
 	
-	if (item_r) memcpy(item_r, &elem[1], gq->elem_size);
+	if (r_item) {
+		memcpy(r_item, elem->data, gq->elem_size);
+	}
 	MEM_freeN(elem);
 }
 
@@ -125,17 +128,17 @@ void BLI_gsqueue_pop(GSQueue *gq, void *item_r)
  * \param item A pointer to an appropriately
  * sized structure (the size passed to BLI_gsqueue_new).
  */
-void BLI_gsqueue_push(GSQueue *gq, void *item)
+void BLI_gsqueue_push(GSQueue *gq, const void *item)
 {
 	GSQueueElem *elem;
 	
 	/* compare: prevent events added double in row */
 	if (!BLI_gsqueue_is_empty(gq)) {
-		if (0 == memcmp(item, &gq->head[1], gq->elem_size))
+		if (0 == memcmp(item, gq->head->data, gq->elem_size))
 			return;
 	}
 	elem = MEM_mallocN(sizeof(*elem) + gq->elem_size, "gqueue_push");
-	memcpy(&elem[1], item, gq->elem_size);
+	memcpy(elem->data, item, gq->elem_size);
 	elem->next = NULL;
 	
 	if (BLI_gsqueue_is_empty(gq)) {
@@ -153,10 +156,10 @@ void BLI_gsqueue_push(GSQueue *gq, void *item)
  * \param item A pointer to an appropriately
  * sized structure (the size passed to BLI_gsqueue_new).
  */
-void BLI_gsqueue_pushback(GSQueue *gq, void *item)
+void BLI_gsqueue_pushback(GSQueue *gq, const void *item)
 {
 	GSQueueElem *elem = MEM_mallocN(sizeof(*elem) + gq->elem_size, "gqueue_push");
-	memcpy(&elem[1], item, gq->elem_size);
+	memcpy(elem->data, item, gq->elem_size);
 	elem->next = gq->head;
 
 	if (BLI_gsqueue_is_empty(gq)) {




More information about the Bf-blender-cvs mailing list