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

📄 dhcp_list.h

📁 wimax bs模拟器
💻 H
字号:
/******************************************************************************\


			Copyright  (c)	2007,  UTStarcom,Inc. (ShenZhen R&D Center)
			All Rights Reserved.

			Subsystem		: WIMAX
			Group			: GW/AnchorEP/...
			File				: dhcp_list.h
			Version			: 
			Build			: 
			Author			: kevin.shi
			Maintained by		: kevin.shi
			Create Date		: 2007-01-01
			Last Modify		: 
			Description		: AEP dhcp tailq list
																			  
\******************************************************************************/
/*
-----------------------------------------------------------
Software Develop CodeName :

Module Reference :
	
-----------------------------------------------------------
Change History:

07-01.01	kevin.shi		create file.
*/
#ifndef _DHCP_LIST_H_
#define _DHCP_LIST_H_

#ifdef __cplusplus
extern "C" {
#endif


/*##################### TAILQ  Begin ####################*/
/*
 * Tail queue definitions.
 */
#define TAILQ_HEAD(name, type)									\
struct name {													\
	struct type *tqh_first;	/* first element */					\
	struct type **tqh_last;	/* addr of last next element */		\
	int	tqh_count;			/* counter for list entries */		\
}

#define TAILQ_HEAD_INITIALIZER(head)							\
	{ NULL, &((head).tqh_first), 0 }

#define TAILQ_ENTRY(type)										\
struct {														\
	struct type *tqe_next;	/* next element */					\
	struct type **tqe_prev;	/* addr of prev's next element */	\
}

#define	TAILQ_INIT(head) do {									\
	(head)->tqh_first = NULL;									\
	(head)->tqh_last = &((head)->tqh_first);					\
	(head)->tqh_count = 0;										\
} while (0)

#define	TAILQ_TOTAL(head)		((head)->tqh_count)
#define	TAILQ_EMPTY(head)		((head)->tqh_first == NULL)
#define	TAILQ_FIRST(head)		((head)->tqh_first)
#define	TAILQ_NEXT(elm, field)	((elm)->field.tqe_next)

#define TAILQ_INSERT_HEAD(head, elm, field) do {				\
	if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)	\
		(head)->tqh_first->field.tqe_prev =						\
		    &(elm)->field.tqe_next;								\
	else														\
		(head)->tqh_last = &(elm)->field.tqe_next;				\
	(head)->tqh_first = (elm);									\
	(elm)->field.tqe_prev = &(head)->tqh_first;					\
	(head)->tqh_count++;										\
} while (0)

#define TAILQ_INSERT_TAIL(head, elm, field) do {				\
	(elm)->field.tqe_next = NULL;								\
	(elm)->field.tqe_prev = (head)->tqh_last;					\
	*(head)->tqh_last = (elm);									\
	(head)->tqh_last = &(elm)->field.tqe_next;					\
	(head)->tqh_count++;										\
} while (0)

#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do {			\
	if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
		(elm)->field.tqe_next->field.tqe_prev = 					\
		    &(elm)->field.tqe_next;									\
	else															\
		(head)->tqh_last = &(elm)->field.tqe_next;					\
	(listelm)->field.tqe_next = (elm);								\
	(elm)->field.tqe_prev = &(listelm)->field.tqe_next;				\
	(head)->tqh_count++;											\
} while (0)

#define	TAILQ_INSERT_BEFORE(head, listelm, elm, field) do {			\
	(elm)->field.tqe_prev = (listelm)->field.tqe_prev;				\
	(elm)->field.tqe_next = (listelm);								\
	*(listelm)->field.tqe_prev = (elm);								\
	(listelm)->field.tqe_prev = &(elm)->field.tqe_next;				\
	(head)->tqh_count++;											\
} while (0)

#define TAILQ_REMOVE(head, elm, field) do {							\
	if (((elm)->field.tqe_next) != NULL)							\
		(elm)->field.tqe_next->field.tqe_prev = 					\
		    (elm)->field.tqe_prev;									\
	else															\
		(head)->tqh_last = (elm)->field.tqe_prev;					\
	*(elm)->field.tqe_prev = (elm)->field.tqe_next;					\
	(head)->tqh_count--;											\
} while (0)

#define TAILQ_REORDER(head, elm, field) do {						\
	(elm)=(head)->tqh_first;										\
	if (((elm)->field.tqe_next) != NULL){							\
		(elm)->field.tqe_next->field.tqe_prev = &(head)->tqh_first;	\
		(head)->tqh_first=(elm)->field.tqe_next;					\
		(elm)->field.tqe_next = NULL;								\
		(elm)->field.tqe_prev = (head)->tqh_last;					\
		*(head)->tqh_last = (elm);									\
		(head)->tqh_last = &(elm)->field.tqe_next;					\
	} }while(0)							

#define TAILQ_GET(head, elm, field)		do{							\
	if(((elm)= (head)->tqh_first) != NULL){							\
		if (((elm)->field.tqe_next) != NULL)						\
			(elm)->field.tqe_next->field.tqe_prev = 				\
			    (elm)->field.tqe_prev;								\
		else														\
			(head)->tqh_last = (elm)->field.tqe_prev;				\
		*(elm)->field.tqe_prev = (elm)->field.tqe_next;				\
		(head)->tqh_count--;										\
	}\
}while(0)

#define TAILQ_PUT(head, elm, field)			do{						\
	(elm)->field.tqe_next = NULL;									\
	(elm)->field.tqe_prev = (head)->tqh_last;						\
	*(head)->tqh_last = (elm);										\
	(head)->tqh_last = &(elm)->field.tqe_next;						\
	(head)->tqh_count++;											\
}while(0)

#define TAILQ_CAT(head1, head2, field)		do{						\
	if((head2)->tqh_count > 0){										\
		((head2)->tqh_first)->field.tqe_prev = (head1)->tqh_last;		\
		*(head1)->tqh_last = (head2)->tqh_first;					\
		(head1)->tqh_last = (head2)->tqh_last;						\
		(head1)->tqh_count+= (head2)->tqh_count;					\
		(head2)->tqh_first = NULL;									\
		(head2)->tqh_last = &((head2)->tqh_first);					\
		(head2)->tqh_count = 0;}										\
}while(0)

#define TAILQ_JOIN(head1, head2, field)		do{						\
	if((head2)->tqh_count > 0){										\
		((head2)->tqh_first)->field.tqe_prev = &((head1)->tqh_first);		\
		*(head2)->tqh_last = (head1)->tqh_first;					\
		(head1)->tqh_first = (head2)->tqh_first;						\
		(head1)->tqh_count+= (head2)->tqh_count;					\
		(head2)->tqh_first = NULL;									\
		(head2)->tqh_last = &((head2)->tqh_first);					\
		(head2)->tqh_count = 0;}										\
}while(0)

#define TAILQ_LAST(head, name)									\
	(*(((struct name *)((head)->tqh_last))->tqh_last))

#define TAILQ_PREV(elm, name, field)							\
	(*(((struct name *)((elm)->field.tqe_prev))->tqh_last))

#define TAILQ_FOREACH(var, head, field)						\
	for ((var) = ((head)->tqh_first);						\
		NULL != (var);										\
		(var) = ((var)->field.tqe_next))

#define TAILQ_ITER(var, head, field)						\
	for ((var) = ((head)->tqh_first);						\
		NULL != (var);										\
		(var) = ((head)->tqh_first))

#define TAILQ_RR(var, head, field) 							\
	if(	((var) != NULL)&& 									\
		((var)->field.tqe_next != NULL)){					\
		*(head)->tqh_last = (head)->tqh_first;				\
		(head)->tqh_first->field.tqe_prev=(head)->tqh_last;	\
		(head)->tqh_last = &(var)->field.tqe_next;			\
		(var) = (var)->field.tqe_next;						\
		(var)->field.tqe_prev = &(head)->tqh_first;			\
		*(head)->tqh_last = NULL;							\
		(head)->tqh_first= (var);}							\

#define TAILQ_FOREACH_REVERSE(var, head, name, field)					\
	for ((var) = (*(((struct name *)((head)->tqh_last))->tqh_last));	\
		NULL != (var);														\
		(var) = (*(((struct name *)((var)->field.tqe_prev))->tqh_last)))
		
/*##################### TAILQ  End ####################*/







#ifdef __cplusplus
}
#endif

#endif /* _DHCP_LIST_H_ */

⌨️ 快捷键说明

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