projects
/
platform
/
core
/
uifw
/
libtdm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add LIST_FIRST_ENTRY, LIST_LAST_ENTRY macro
[platform/core/uifw/libtdm.git]
/
include
/
tdm_list.h
diff --git
a/include/tdm_list.h
b/include/tdm_list.h
index
2fd1db0
..
3873817
100644
(file)
--- a/
include/tdm_list.h
+++ b/
include/tdm_list.h
@@
-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_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))
#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))
&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); \
#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); \