add LIST_FIRST_ENTRY, LIST_LAST_ENTRY macro
[platform/core/uifw/libtdm.git] / include / tdm_list.h
index 2fd1db0..3873817 100644 (file)
@@ -112,6 +112,12 @@ static inline int list_length(struct list_head *item)
 #define LIST_ENTRY(__type, __item, __field)   \
        ((__type *)(((char *)(__item)) - offsetof(__type, __field)))
 
+#define LIST_FIRST_ENTRY(__ptr, __type, __field)   \
+       LIST_ENTRY(__type, (__ptr)->next, __field)
+
+#define LIST_LAST_ENTRY(__ptr, __type, __field)   \
+       LIST_ENTRY(__type, (__ptr)->prev, __field)
+
 #define LIST_IS_EMPTY(__list)                   \
        ((__list)->next == (__list))
 
@@ -126,6 +132,11 @@ static inline int list_length(struct list_head *item)
        &pos->member != (head);                                         \
        pos = container_of(pos->member.next, pos, member))
 
+#define LIST_FOR_EACH_ENTRY_REV(pos, head, member)                             \
+       for (pos = container_of((head)->prev, pos, member);                     \
+       &pos->member != (head);                                         \
+       pos = container_of(pos->member.prev, pos, member))
+
 #define LIST_FOR_EACH_ENTRY_SAFE(pos, storage, head, member)   \
        for (pos = container_of((head)->next, pos, member),                     \
        storage = container_of(pos->member.next, pos, member);  \