Module: xenomai-forge
Branch: next
Commit: c67409451cad54f239df28e4a3ddc138fd41054f
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=c67409451cad54f239df28e4a3ddc138fd41054f

Author: Philippe Gerum <r...@xenomai.org>
Date:   Sat Jun 28 21:05:23 2014 +0200

boilerplate/list: add safe reverse scanners

---

 include/boilerplate/private-list.h |    9 +++++++++
 include/boilerplate/shared-list.h  |   12 ++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/include/boilerplate/private-list.h 
b/include/boilerplate/private-list.h
index d1167c2..4e70ac7 100644
--- a/include/boilerplate/private-list.h
+++ b/include/boilerplate/private-list.h
@@ -187,4 +187,13 @@ static inline int pvlist_heading_p(const struct pvholder 
*holder,
             pos = pvlist_entry(pos->member.prev,                       \
                              typeof(*pos), member))
 
+#define pvlist_for_each_entry_reverse_safe(pos, tmp, list, member)     \
+       for (pos = pvlist_entry((list)->head.prev,                      \
+                             typeof(*pos), member),                    \
+                    tmp = pvlist_entry((pos)->member.prev,             \
+                                     typeof(*pos), member);            \
+            &(pos)->member != &(list)->head;                           \
+            pos = tmp, tmp = pvlist_entry((pos)->member.prev,          \
+                                        typeof(*pos), member))
+
 #endif /* !_BOILERPLATE_PRIVATE_LIST_H */
diff --git a/include/boilerplate/shared-list.h 
b/include/boilerplate/shared-list.h
index 51e1ea4..a98cbe0 100644
--- a/include/boilerplate/shared-list.h
+++ b/include/boilerplate/shared-list.h
@@ -294,6 +294,15 @@ static inline int list_heading_p(const struct holder 
*holder,
             pos = tmp, tmp = list_entry(__hptr((heap), (pos)->member.next), \
                                         typeof(*pos), member))
 
+#define __list_for_each_entry_reverse_safe(heap, pos, tmp, list, member) \
+       for (pos = list_entry(__hptr((heap), (list)->head.prev),        \
+                             typeof(*pos), member),                    \
+                    tmp = list_entry(__hptr((heap), (pos)->member.prev), \
+                                     typeof(*pos), member);            \
+            &(pos)->member != &(list)->head;                           \
+            pos = tmp, tmp = list_entry(__hptr((heap), (pos)->member.prev), \
+                                        typeof(*pos), member))
+
 #define list_for_each_entry_safe(pos, tmp, list, member)               \
        __list_for_each_entry_safe(__main_heap, pos, tmp, list, member)
 
@@ -307,4 +316,7 @@ static inline int list_heading_p(const struct holder 
*holder,
 #define list_for_each_entry_reverse(pos, list, member)                 \
        __list_for_each_entry_reverse(__main_heap, pos, list, member)
 
+#define list_for_each_entry_reverse_safe(pos, tmp, list, member)       \
+       __list_for_each_entry_reverse_safe(__main_heap, pos, tmp, list, member)
+
 #endif /* !_BOILERPLATE_SHARED_LIST_H */


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to