|
@@ -104,6 +104,23 @@ rt_inline int rt_list_isempty(const rt_list_t *l)
|
|
return l->next == l;
|
|
return l->next == l;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * @brief get the list length
|
|
|
|
+ * @param l the list to get.
|
|
|
|
+ */
|
|
|
|
+rt_inline unsigned int rt_list_len(const rt_list_t *l)
|
|
|
|
+{
|
|
|
|
+ unsigned int len = 0;
|
|
|
|
+ const rt_list_t *p = l;
|
|
|
|
+ while (p->next != l)
|
|
|
|
+ {
|
|
|
|
+ p = p->next;
|
|
|
|
+ len ++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return len;
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* @brief get the struct for this entry
|
|
* @brief get the struct for this entry
|
|
* @param node the entry point
|
|
* @param node the entry point
|
|
@@ -177,6 +194,19 @@ rt_inline rt_slist_t *rt_slist_remove(rt_slist_t *l, rt_slist_t *n)
|
|
return l;
|
|
return l;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+rt_inline unsigned int rt_slist_len(const rt_slist_t *l)
|
|
|
|
+{
|
|
|
|
+ unsigned int len = 0;
|
|
|
|
+ const rt_slist_t *list = l->next;
|
|
|
|
+ while (list != RT_NULL)
|
|
|
|
+ {
|
|
|
|
+ list = list->next;
|
|
|
|
+ len ++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return len;
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* @brief get the struct for this single list node
|
|
* @brief get the struct for this single list node
|
|
* @param node the entry point
|
|
* @param node the entry point
|