98#define SH_LIST_FIRST(object) ((object)->pstNext)
120#define SH_LIST_LAST(object) ((object)->pstPrev)
170 if ((list == NULL) || (node == NULL)) {
198 if ((list == NULL) || (node == NULL)) {
259 return (
bool)(list->
pstNext == list);
284 SH_List *oldListTail = oldList;
285 SH_List *newListHead = newList;
288 oldListTail->
pstNext = newListHead;
289 newListHead->
pstPrev = oldListTail;
290 oldListHead->
pstPrev = newListTail;
291 newListTail->
pstNext = oldListHead;
361#define LOS_OFF_SET_OF(type, member) ((uintptr_t)&((type *)0)->member)
386#define SH_LIST_ENTRY(item, type, member) \
387 ((type *)(void *)((char *)(item) - LOS_OFF_SET_OF(type, member)))
410#define SH_LIST_FOR_EACH_ENTRY(item, list, type, member) \
411 for (item = SH_LIST_ENTRY((list)->pstNext, type, member); \
412 &(item)->member != (list); \
413 item = SH_LIST_ENTRY((item)->member.pstNext, type, member))
437#define SH_LIST_FOR_EACH_ENTRY_SAFE(item, next, list, type, member) \
438 for (item = SH_LIST_ENTRY((list)->pstNext, type, member), \
439 next = SH_LIST_ENTRY((item)->member.pstNext, type, member); \
440 &(item)->member != (list); \
441 item = next, next = SH_LIST_ENTRY((item)->member.pstNext, type, member))
487#define SH_LIST_FOR_EACH(item, list) \
488 for (item = (list)->pstNext; \
490 item = (item)->pstNext)
512#define SH_LIST_FOR_EACH_SAFE(item, next, list) \
513 for (item = (list)->pstNext, next = (item)->pstNext; \
515 item = next, next = (item)->pstNext)
535#define SH_LIST_HEAD(list) SH_List list = { &(list), &(list) }
537#define SH_ListPeekHeadType(list, type, element) do { \
539 if ((list)->pstNext == list) { \
542 __t = SH_LIST_ENTRY((list)->pstNext, type, element); \
547#define SH_ListRemoveHeadType(list, type, element) do { \
549 if ((list)->pstNext == list) { \
552 __t = SH_LIST_ENTRY((list)->pstNext, type, element); \
553 SH_ListDelete((list)->pstNext); \
558#define SH_ListNextType(list, item, type, element) do { \
560 if ((item)->pstNext == list) { \
563 __t = SH_LIST_ENTRY((item)->pstNext, type, element); \
static void SH_ListTailInsertList(SH_List *oldList, SH_List *newList)
Insert a doubly list to the tail of a doubly linked list.
static void SH_ListDelInit(SH_List *list)
Delete initialize a doubly linked list.
static void SH_ListDelete(SH_List *node)
static void SH_ListAddList(SH_List *oldList, SH_List *newList)
Insert a new list to a doubly linked list.
static void SH_ListInit(SH_List *list)
static void SH_ListTailInsert(SH_List *list, SH_List *node)
Insert a node to the tail of a doubly linked list.
static void SH_ListHeadInsertList(SH_List *oldList, SH_List *newList)
Insert a doubly list to the head of a doubly linked list.
static void SH_ListHeadInsert(SH_List *list, SH_List *node)
Insert a node to the head of a doubly linked list.
static bool SH_ListEmpty(SH_List *list)
Identify whether a specified doubly linked list is empty.
static void SH_ListAdd(SH_List *list, SH_List *node)
Insert a new node to a doubly linked list.