summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2010-11-09 23:01:39 +0200
committerAlon Levy <alevy@redhat.com>2011-03-02 17:27:52 +0200
commit6b862596460802aff0604f16bb3e77c524512e84 (patch)
treea847db9fb1360e8aa1ee474b856fc92169b7fbc2 /common
parent38e13ef1a87d1cd035d36f5ef0eb5f8f1359407f (diff)
downloadspice-6b862596460802aff0604f16bb3e77c524512e84.tar.gz
spice-6b862596460802aff0604f16bb3e77c524512e84.tar.xz
spice-6b862596460802aff0604f16bb3e77c524512e84.zip
ring: add RING_FOREACH{,_SAFE,_REVERSED}
Diffstat (limited to 'common')
-rw-r--r--common/ring.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/common/ring.h b/common/ring.h
index defa1eda..a013a2fa 100644
--- a/common/ring.h
+++ b/common/ring.h
@@ -19,6 +19,8 @@
#ifndef _H_RING2
#define _H_RING2
+#include "spice_common.h"
+
typedef struct Ring RingItem;
typedef struct Ring {
RingItem *prev;
@@ -129,5 +131,24 @@ static inline RingItem *ring_prev(Ring *ring, RingItem *pos)
return (ret == ring) ? NULL : ret;
}
+#define RING_FOREACH_SAFE(var, next, ring) \
+ for ((var) = ring_get_head(ring), \
+ (next) = (var) ? ring_next(ring, (var)) : NULL; \
+ (var); \
+ (var) = (next), \
+ (next) = (var) ? ring_next(ring, (var)) : NULL)
+
+
+#define RING_FOREACH(var, ring) \
+ for ((var) = ring_get_head(ring); \
+ (var); \
+ (var) = ring_next(ring, var))
+
+#define RING_FOREACH_REVERSED(var, ring) \
+ for ((var) = ring_get_tail(ring); \
+ (var); \
+ (var) = ring_prev(ring, var))
+
+
#endif