aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-09-24 13:47:43 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-09-24 13:47:43 +0200
commit2e0961e7251bb6a3135012475f2bdca010e2f93d (patch)
tree2b6d1b332e2db9d7a35089b50405478635e591ca
parent35230b5fd1b96898d51372f92142e28bae13fb73 (diff)
downloadosc-graphics-2e0961e7251bb6a3135012475f2bdca010e2f93d.tar.gz
use BSD list macros instead of handwritten list primitives
luckily this works thanks to C++ classes being backward compatible to C structs
-rw-r--r--layer.cpp38
-rw-r--r--layer.h8
2 files changed, 19 insertions, 27 deletions
diff --git a/layer.cpp b/layer.cpp
index 89f437f..d0516ab 100644
--- a/layer.cpp
+++ b/layer.cpp
@@ -1,27 +1,24 @@
#include <string.h>
+#include <bsd/sys/queue.h>
#include <SDL.h>
#include "osc_graphics.h"
#include "layer.h"
-#define FOREACH_LAYER(VAR) \
- for (Layer *VAR = head; VAR; VAR = VAR->next)
-
void
LayerList::insert(int pos, Layer *layer)
{
- Layer *cur, *prev = NULL;
+ Layer *cur, **prev;
lock();
- for (cur = head; cur && pos; prev = cur, cur = cur->next, pos--);
+ SLIST_FOREACH_PREVPTR(cur, prev, &head, layers)
+ if (!pos--)
+ break;
- layer->next = cur;
- if (prev)
- prev->next = layer;
- else
- head = layer;
+ SLIST_NEXT(layer, layers) = cur;
+ *prev = layer;
unlock();
}
@@ -29,28 +26,20 @@ LayerList::insert(int pos, Layer *layer)
bool
LayerList::delete_by_name(const char *name)
{
- Layer *prev = NULL;
+ Layer *cur, **prev;
lock();
- FOREACH_LAYER(cur) {
+ SLIST_FOREACH_PREVPTR(cur, prev, &head, layers)
if (!strcmp(cur->name, name)) {
- if (prev)
- prev->next = cur->next;
- else
- head = cur->next;
+ *prev = SLIST_NEXT(cur, layers);
delete cur;
-
- unlock();
- return false;
+ break;
}
- prev = cur;
- }
-
unlock();
- return true;
+ return cur == NULL;
}
void
@@ -60,7 +49,8 @@ LayerList::render(SDL_Surface *target)
lock();
- FOREACH_LAYER(cur) {
+ Layer *cur;
+ SLIST_FOREACH(cur, &head, layers) {
cur->lock();
cur->frame(target);
cur->unlock();
diff --git a/layer.h b/layer.h
index ce9a417..1bbe7e6 100644
--- a/layer.h
+++ b/layer.h
@@ -2,6 +2,7 @@
#define __HAVE_LAYER_H
#include <string.h>
+#include <bsd/sys/queue.h>
#include <SDL.h>
#include <SDL_thread.h>
@@ -10,7 +11,7 @@ class Layer {
SDL_mutex *mutex;
public:
- Layer *next;
+ SLIST_ENTRY(Layer) layers;
char *name;
@@ -43,7 +44,7 @@ public:
};
class LayerList {
- Layer *head;
+ SLIST_HEAD(layers_head, Layer) head;
SDL_mutex *mutex;
@@ -59,8 +60,9 @@ class LayerList {
}
public:
- LayerList() : head(NULL)
+ LayerList()
{
+ SLIST_INIT(&head);
mutex = SDL_CreateMutex();
}
~LayerList()