68 #define SlInitHead(_head) \    79 #define SlAddNodeToHead(_head, _node) \    80     SlInsertNodeAfter(_head, _node)   120 #define SlIsListEmpty(_head) \   121     ((_head)->Next == NULL)   166 #define OFFSET_OF(_type, _field)    \   167     ((size_t)&((_type *)0)->_field)   179 #ifndef CONTAINING_RECORD   180 #define CONTAINING_RECORD(_address, _type, _field)  \   181     ((_type *)((unsigned char *)(_address) - OFFSET_OF(_type, _field)))   195 #define SlForEachNode(_head, _node) \   196     for ((_node) = (_head)->Next; (_node) != NULL; (_node) = (_node)->Next) SlNode_t * SlRemoveNodeFromTail(SlNode_t *Head)
 
void SlRemoveNode(SlNode_t *Head, SlNode_t *Node)
 
SlNode_t * SlRemoveNodeFromHead(SlNode_t *Head)
 
struct SlNode_t_ SlNode_t
 
void SlInsertNodeBefore(SlNode_t *Head, SlNode_t *Marker, SlNode_t *Node)
 
void SlInsertNodeAfter(SlNode_t *Marker, SlNode_t *Node)
 
void SlAddNodeToTail(SlNode_t *Head, SlNode_t *Node)