⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 com_list.h

📁 6440linuxDriver的源代码
💻 H
字号:
#ifndef COMMON_LIST_H#define COMMON_LIST_H#include "com_define.h"/* * Simple doubly linked list implementation. * * Some of the internal functions ("__xxx") are useful when * manipulating whole lists rather than single entries, as * sometimes we already know the next/prev entries and we can * generate better code by using them directly rather than * using the generic single-entry routines. */#ifdef _OS_LINUX/* use native code */#define List_Head           struct list_head#define PList_Head          struct list_head *#define MV_LIST_HEAD        LIST_HEAD#define MV_INIT_LIST_HEAD   LIST_HEAD_INIT#define MV_LIST_HEAD_INIT   INIT_LIST_HEAD#define List_Add            list_add#define List_AddTail        list_add_tail#define List_Del            list_del#define List_DelInit        list_del_init#define List_Move           list_move#define List_MoveTail       list_move_tail#define List_Empty          list_empty#define CONTAINER_OF        container_of#define LIST_ENTRY          list_entry#define LIST_FOR_EACH       list_for_each#define LIST_FOR_EACH_PREV  list_for_each_prev#define LIST_FOR_EACH_ENTRY list_for_each_entry#define LIST_FOR_EACH_ENTRY_PREV list_for_each_entry_prev#define LIST_FOR_EACH_ENTRY_TYPE(ptr, list_ptr, type, entry) \           list_for_each_entry(ptr, list_ptr, entry)#define List_Splice         list_splice#define List_Splice_Init    list_splice_init#define __List_Del          __list_del  /* internal function, use with care */static inline struct list_head *List_GetFirst(struct list_head *head){        struct list_head * one = NULL;        if (list_empty(head))		return NULL;        one = head->next;        list_del(one);        return one;}static inline struct list_head *List_GetLast(struct list_head *head){        struct list_head * one = NULL;        if (list_empty(head))		return NULL;        one = head->prev;        list_del(one);        return one;}#else /* _OS_LINUX *//* * * * Data Structure * * */typedef struct _List_Head {	struct _List_Head *prev, *next;} List_Head, * PList_Head;/* * * * Exposed Functions * * */ #define MV_LIST_HEAD(name) \	List_Head name = { &(name), &(name) }#define MV_LIST_HEAD_INIT(ptr) do { \	(ptr)->next = (ptr); (ptr)->prev = (ptr); \} while (0)static MV_INLINE void List_Add(List_Head *new_one, List_Head *head);static MV_INLINE void List_AddTail(List_Head *new_one, List_Head *head);static MV_INLINE void List_Del(List_Head *entry);static MV_INLINE void List_DelInit(List_Head *entry);static MV_INLINE void List_Move(List_Head *list, List_Head *head);static MV_INLINE void List_MoveTail(List_Head *list,				  List_Head *head);static MV_INLINE int List_Empty(const List_Head *head);/** * LIST_ENTRY - get the struct for this entry * @ptr:	the &List_Head pointer. * @type:	the type of the struct this is embedded in. * @member:	the name of the list_struct within the struct. *///TBD/*#define CONTAINER_OF(ptr, type, member) ({			\*        const typeof( ((type *)0)->member ) *__mptr = (ptr);	\*        (type *)( (char *)__mptr - OFFSET_OF(type,member) );})*/#define CONTAINER_OF(ptr, type, member) 			\        ( (type *)( (char *)(ptr) - OFFSET_OF(type,member) ) )#define LIST_ENTRY(ptr, type, member) \	CONTAINER_OF(ptr, type, member)/** * LIST_FOR_EACH	-	iterate over a list * @pos:	the &List_Head to use as a loop counter. * @head:	the head for your list. */#define LIST_FOR_EACH(pos, head) \	for (pos = (head)->next; pos != (head); pos = pos->next)/** * LIST_FOR_EACH_PREV	-	iterate over a list backwards * @pos:	the &List_Head to use as a loop counter. * @head:	the head for your list. */#define LIST_FOR_EACH_PREV(pos, head) \	for (pos = (head)->prev; pos != (head); pos = pos->prev)/** * LIST_FOR_EACH_ENTRY	-	iterate over list of given type * @pos:	the type * to use as a loop counter. * @head:	the head for your list. * @member:	the name of the list_struct within the struct. */#define LIST_FOR_EACH_ENTRY(pos, head, member)				\	for (pos = LIST_ENTRY((head)->next, typeof(*pos), member);	\	     &pos->member != (head); 	\	     pos = LIST_ENTRY(pos->member.next, typeof(*pos), member))/** * LIST_FOR_EACH_ENTRY_TYPE	-	iterate over list of given type * @pos:	the type * to use as a loop counter. * @head:	the head for your list. * @member:	the name of the list_struct within the struct. * @type:	the type of the struct this is embedded in.*/#define LIST_FOR_EACH_ENTRY_TYPE(pos, head, type, member)       \	for (pos = LIST_ENTRY((head)->next, type, member);	\	     &pos->member != (head); 	                        \	     pos = LIST_ENTRY(pos->member.next, type, member))/** * LIST_FOR_EACH_ENTRY_PREV - iterate backwards over list of given type. * @pos:	the type * to use as a loop counter. * @head:	the head for your list. * @member:	the name of the list_struct within the struct. */#define LIST_FOR_EACH_ENTRY_PREV(pos, head, member)			\	for (pos = LIST_ENTRY((head)->prev, typeof(*pos), member);	\	     &pos->member != (head); 	\	     pos = LIST_ENTRY(pos->member.prev, typeof(*pos), member))#ifndef _OS_BIOS#ifdef SIMULATOR#include "com_list.cpp"#else#include "com_list.c"#endif#endif#endif /* _OS_LINUX */#define List_GetFirstEntry(head, type, member)	\	LIST_ENTRY(List_GetFirst(head), type, member)#define List_GetLastEntry(head, type, member)	\	LIST_ENTRY(List_GetLast(head), type, member)#endif /* COMMON_LIST_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -