Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-06-14 22:30:32 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-06-14 22:32:37 +0400
commit9c1728457b3f2c3e6a575bd806aaaf7a118c82cc (patch)
treeff46a423eaeaf1763d2d91c8926005c1c9c6da84
parentd6287b213bab87d80aca20b688b0a0ace7be5521 (diff)
BLI_gsqueue: refactor to use zero length array
-rw-r--r--source/blender/blenlib/BLI_gsqueue.h8
-rw-r--r--source/blender/blenlib/intern/gsqueue.c21
2 files changed, 16 insertions, 13 deletions
diff --git a/source/blender/blenlib/BLI_gsqueue.h b/source/blender/blenlib/BLI_gsqueue.h
index f7c669891ad..d17897df665 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 72f30086e9b..67703c3f033 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)) {