11#ifndef __TUYA_SLIST_H__
12#define __TUYA_SLIST_H__
14#include "tuya_cloud_types.h"
32#define SLIST_HEAD(name) \
33SLIST_HEAD name = {NULL}
39#define INIT_SLIST_HEAD(ptr) do { \
47#define NEW_SLIST_NODE(type,node) \
49 node = (type *)Malloc(sizeof(type));\
56#define SLIST_ENTRY(ptr, type, member) CNTR_OF(ptr,type,member)
62#define SLIST_FOR_EACH_ENTRY(tpos, type, pos, list, member) \
63 for (pos = (list)->next; \
64 pos && (tpos = SLIST_ENTRY(pos, type, member), 1); \
71#define SLIST_FOR_EACH_ENTRY_SAFE(tpos, type, pos, n, list, member) \
72 for (pos = (list)->next; \
73 pos && (n = pos->next, 1) && \
74 (tpos = SLIST_ENTRY(pos, type, member), 1); \
81#define SLIST_FOR_EACH(pos, list) \
82 for (pos = (list)->next; pos ; \
89#define SLIST_FOR_EACH_SAFE(pos, n, list) \
90 for (pos = (list)->next; pos && ({ n = pos->next; 1; }); \
97#define FREE_SLIST_SAFE(tpos, type, pos, n, list, member) \
100 SLIST_FOR_EACH_ENTRY_SAFE(tpos, type, pos, n, list, member) { \
113STATIC INLINE VOID tuya_init_slist_node(INOUT
SLIST_HEAD *node)
124STATIC INLINE INT_T tuya_slist_empty(IN CONST
SLIST_HEAD *list)
126 return !(list->next);
148 last->next = pos->next;
163 n->next = list->next;
sigle list head
Definition: tuya_slist.h:24
#define SLIST_HEAD(name)
define a sigle list head and initialize to empty
Definition: tuya_slist.h:32
#define SLIST_FOR_EACH(pos, list)
traverse each node of the sigle list, cannot change the sigle list
Definition: tuya_slist.h:81