rcuja-range: get values
[userspace-rcu.git] / urcu / hlist.h
index e3b94ced234f61a721a52cef7a19fec543c63b5a..15e672bc1702135ddfdb20b5676785dbd3cb2f55 100644 (file)
@@ -16,6 +16,8 @@
  * published by the Free  Software Foundation.
  */
 
+#include <stddef.h>
+
 struct cds_hlist_head
 {
        struct cds_hlist_node *next;
@@ -37,6 +39,15 @@ static inline void  CDS_INIT_HLIST_HEAD(struct cds_hlist_head *ptr)
 #define cds_hlist_entry(ptr, type, member)                                     \
        ((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member)))
 
+/* Get first entry from a list. Assumes the hlist is not empty. */
+#define cds_hlist_first_entry(ptr, type, member) \
+       cds_list_entry((ptr)->next, type, member)
+
+static inline int cds_hlist_empty(struct cds_hlist_head *head)
+{
+       return !head->next;
+}
+
 /* Add new element at the head of the list.  */
 static inline void cds_hlist_add_head (struct cds_hlist_node *newp,
                                   struct cds_hlist_head *head)
@@ -60,16 +71,16 @@ static inline void cds_hlist_del (struct cds_hlist_node *elem)
 
 #define cds_hlist_for_each_entry(entry, pos, head, member)                     \
        for (pos = (head)->next,                                        \
-                    entry = cds_hlist_entry(pos, typeof(*entry), member);      \
+                    entry = cds_hlist_entry(pos, __typeof__(*entry), member);  \
             pos != NULL;                                               \
             pos = pos->next,                                   \
-                    entry = cds_hlist_entry(pos, typeof(*entry), member))
+                    entry = cds_hlist_entry(pos, __typeof__(*entry), member))
 
 #define cds_hlist_for_each_entry_safe(entry, pos, p, head, member)             \
        for (pos = (head)->next,                                        \
-                    entry = cds_hlist_entry(pos, typeof(*entry), member);      \
+                    entry = cds_hlist_entry(pos, __typeof__(*entry), member);  \
             (pos != NULL) && ({ p = pos->next; 1;});                   \
             pos = p,                                                   \
-                    entry = cds_hlist_entry(pos, typeof(*entry), member))
+                    entry = cds_hlist_entry(pos, __typeof__(*entry), member))
 
 #endif /* _KCOMPAT_HLIST_H */
This page took 0.023323 seconds and 4 git commands to generate.