1
0
Эх сурвалжийг харах

[slist] Add rt_slist_tail and rt_slist_tail_entry for slist.

armink 6 жил өмнө
parent
commit
a969b7096f
1 өөрчлөгдсөн 18 нэмэгдсэн , 0 устгасан
  1. 18 0
      include/rtservice.h

+ 18 - 0
include/rtservice.h

@@ -253,6 +253,13 @@ rt_inline rt_slist_t *rt_slist_first(rt_slist_t *l)
     return l->next;
 }
 
+rt_inline rt_slist_t *rt_slist_tail(rt_slist_t *l)
+{
+    while (l->next) l = l->next;
+
+    return l;
+}
+
 rt_inline rt_slist_t *rt_slist_next(rt_slist_t *n)
 {
     return n->next;
@@ -302,6 +309,17 @@ rt_inline int rt_slist_isempty(rt_slist_t *l)
 #define rt_slist_first_entry(ptr, type, member) \
     rt_slist_entry((ptr)->next, type, member)
 
+/**
+ * rt_slist_tail_entry - get the tail element from a slist
+ * @ptr:    the slist head to take the element from.
+ * @type:   the type of the struct this is embedded in.
+ * @member: the name of the slist_struct within the struct.
+ *
+ * Note, that slist is expected to be not empty.
+ */
+#define rt_slist_tail_entry(ptr, type, member) \
+    rt_slist_entry(rt_slist_tail(ptr), type, member)
+
 /*@}*/
 
 #ifdef __cplusplus