亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mpls_list.h

?? Linux平臺下
?? H
字號:
/* *  Copyright (C) James R. Leu 2002 *  jleu@mindspring.com * *  This software is covered under the LGPL, for more *  info check out http://www.gnu.org/copyleft/lgpl.html */#ifndef _MPLS_LIST_H_#define _MPLS_LIST_H_#include "mpls_mm_impl.h"/* Endo list, the prev,next ptrs are part of the element in the list *//* No addition memory allocations are done when inserting into the list */#define MPLS_LIST_ROOT(name,type)	\struct name {				\  struct type *llh_first;		\  struct type *llh_last;		\  int count;				\}#define MPLS_LIST_ELEM(type)		\struct {				\  struct type *lle_next;		\  struct type *lle_prev;		\}#define MPLS_LIST_REMOVE(head, elm, field) {				\  if((elm)->field.lle_next == (void *)(head))				\    (head)->llh_last = (elm)->field.lle_prev;				\  else									\    (elm)->field.lle_next->field.lle_prev = (elm)->field.lle_prev;	\  if((elm)->field.lle_prev == (void *)(head))				\    (head)->llh_first = (elm)->field.lle_next;				\  else									\    (elm)->field.lle_prev->field.lle_next = (elm)->field.lle_next;	\  (head)->count--;							\}#define MPLS_LIST_INSERT_BEFORE(head,listelm,elm,field) {	\  (elm)->field.lle_next = (listelm);				\  (elm)->field.lle_prev = (listelm)->field.lle_prev;		\  if((listelm)->field.lle_prev == (void *)(head))		\    (head)->llh_first = (elm);					\  else								\    (listelm)->field.lle_prev->field.lle_next = (elm);		\  (listelm)->field.lle_prev = (elm);				\  (head)->count++;						\}#define MPLS_LIST_INIT(head,type) {		\  (head)->llh_first = (struct type *)(head);	\  (head)->llh_last = (struct type *)(head);	\  (head)->count = 0;				\}#define MPLS_LIST_IN_LIST(elm,field) ((elm)->field.lle_next && (elm)->field.lle_prev)#define MPLS_LIST_ADD_HEAD(head, elm, field, type) {	\  (elm)->field.lle_next = (head)->llh_first;		\  (elm)->field.lle_prev = (struct type *)(head);	\  if ((head)->llh_last == (struct type *)(head))	\    (head)->llh_last = (elm);				\  else							\    (head)->llh_first->field.lle_prev = (elm);		\  (head)->llh_first = (elm);				\  (head)->count++;					\}#define MPLS_LIST_ADD_TAIL(head, elm, field, type) {	\  (elm)->field.lle_next = (struct type *)(head);	\  (elm)->field.lle_prev = (head)->llh_last;		\  if ((head)->llh_first == (struct type *)(head))	\    (head)->llh_first = (elm);				\  else							\    (head)->llh_last->field.lle_next = (elm);		\  (head)->llh_last = (elm);				\  (head)->count++;					\}#define MPLS_LIST_REMOVE_TAIL(root,elem,field) {	\  (elem) = (root)->llh_last;			\  if((elem) && (elem) != (void*)(root)) {	\    MPLS_LIST_REMOVE(root,elem,field);		\  } else {					\    (elem) = NULL;				\  }						\  (root)->count--;				\}#define MPLS_LIST_REMOVE_HEAD(root,elem,field) {	\  (elem) = (root)->llh_first;			\  if((elem) && (elem) != (void*)(root)) {	\    MPLS_LIST_REMOVE(root,elem,field);		\  } else {					\    (elem) = NULL;				\  }						\  (root)->count--;				\}#define MPLS_LIST_ELEM_INIT(elem,field) {	\  (elem)->field.lle_next = NULL;		\  (elem)->field.lle_prev = NULL;		\}#define MPLS_LIST_HEAD(root)		(((root)->llh_first == (void*)(root))?(NULL):((root)->llh_first))#define MPLS_LIST_NEXT(root,elem,field)	((((elem)->field.lle_next) == (void*)(root))?(NULL):((elem)->field.lle_next))#define MPLS_LIST_PREV(root,elem,field)	((((elem)->field.lle_prev) == (void*)(root))?(NULL):((elem)->field.lle_prev))#define MPLS_LIST_TAIL(root)		(((root)->llh_last == (void*)(root))?(NULL):((root)->llh_last))#define MPLS_LIST_EMPTY(root) ((root)->count ? MPLS_BOOL_FALSE : MPLS_BOOL_TRUE)/* non Endo list, the list node has the next,prev pointers and a pointer to *//* the data being stored, a memory allocation has to occur for each insert */typedef struct mpls_link_list_node {  struct mpls_link_list_node *next;  struct mpls_link_list_node *prev;  void *data;} mpls_link_list_node;typedef struct mpls_link_list {  struct mpls_link_list_node *head;  struct mpls_link_list_node *tail;  int count;} mpls_link_list;#define mpls_link_list_head(X) ((X)->head)#define mpls_link_list_head_data(X) ((X)->head ? (X)->head->data : NULL)#define mpls_link_list_tail(X) ((X)->tail)#define mpls_link_list_tail_data(X) ((X)->tail ? (X)->tail->data : NULL)#define mpls_link_list_count(X) ((X)->count)#define mpls_link_list_isempty(X) ((X)->head == NULL && (X)->tail == NULL)#define MPLS_LINK_LIST_LOOP(LIST,DATA,NODE)			\  for ((NODE) = (LIST)->head; (NODE); (NODE) = (NODE)->next)	\    if (((DATA) = (NODE)->data) != NULL)static inline void mpls_link_list_init(struct mpls_link_list *list) {  memset(list, 0, sizeof(*list));}static inline struct mpls_link_list *mpls_link_list_create() {  struct mpls_link_list *list;  if ((list = mpls_malloc(sizeof(*list)))) {    mpls_link_list_init(list);  }  return list;}static inline void mpls_link_list_delete(struct mpls_link_list *list) {  mpls_free(list);}static inline struct mpls_link_list_node *mpls_link_list_node_create(void *data){  struct mpls_link_list_node *node;  if ((node = mpls_malloc(sizeof(*node)))) {    memset(node, 0, sizeof(*node));    node->data = data;  }  return node;}static inline void mpls_link_list_node_delete(struct mpls_link_list_node *node){  mpls_free(node);}static inline void mpls_link_list_add_node_head(struct mpls_link_list *list,  struct mpls_link_list_node *node) {  node->next = list->head;      if (list->tail == NULL) {    list->tail = node;   } else {    list->head->prev = node;    node->next = list->head;  }  list->head = node;  list->count++;}static inline mpls_return_enum mpls_link_list_add_head(  struct mpls_link_list *list, void * data) {  struct mpls_link_list_node *node;  if ((node = mpls_link_list_node_create(data))) {    mpls_link_list_add_node_head(list,node);    return MPLS_SUCCESS;  }  return MPLS_FATAL;}static inline void mpls_link_list_add_node_tail(  struct mpls_link_list *list, struct mpls_link_list_node *node) {  node->prev = list->tail;  if (list->head == NULL) {    list->head = node;   } else {    node->prev = list->tail;    list->tail->next = node;  }  list->tail = node;  list->count++;}static inline mpls_return_enum mpls_link_list_add_tail(  struct mpls_link_list *list, void *data) {  struct mpls_link_list_node *node;  if ((node = mpls_link_list_node_create(data))) {    mpls_link_list_add_node_tail(list, node);    return MPLS_SUCCESS;  }  return MPLS_FATAL;}static inline void mpls_link_list_add_node_before(struct mpls_link_list *list,  struct mpls_link_list_node *ptr, struct mpls_link_list_node *node) {  if (list->head == ptr) {    node->next = ptr;    ptr->prev = node;    list->head = node;  } else {    node->prev = ptr->prev;    node->next = ptr;    ptr->prev->next = node;    ptr->prev = node;  }  list->count++;}static inline mpls_return_enum mpls_link_list_add_data_before(  struct mpls_link_list *list, struct mpls_link_list_node *ptr, void *data) {  struct mpls_link_list_node *node;  if ((node = mpls_link_list_node_create(data))) {    mpls_link_list_add_node_before(list,ptr,node);    return MPLS_SUCCESS;  }  return MPLS_FATAL;}static inline void mpls_link_list_add_node_after(struct mpls_link_list *list,  struct mpls_link_list_node *ptr, struct mpls_link_list_node *node) {  if (list->tail == ptr) {    ptr->next = node;    node->prev = ptr;     list->tail = node;  } else {    node->prev = ptr;    node->next = ptr->next;    ptr->next = node;    ptr->next->prev = node;  }  list->count++;}static inline mpls_return_enum mpls_link_list_add_data_after(  struct mpls_link_list *list, struct mpls_link_list_node *ptr, void *data) {  struct mpls_link_list_node *node;  if ((node = mpls_link_list_node_create(data))) {    mpls_link_list_add_node_after(list, ptr, node);    return MPLS_SUCCESS;  }  return MPLS_FATAL;}static inline void mpls_link_list_remove_node(struct mpls_link_list *list,  struct mpls_link_list_node *node) {  if (node->prev) {    node->prev->next = node->next;  } else {    list->head = node->next;  }  if (node->next) {    node->next->prev = node->prev;  } else {    list->tail = node->prev;  }  list->count--;}static inline void mpls_link_list_remove_data(struct mpls_link_list* list,  void *val){  struct mpls_link_list_node *node;  for (node = list->head; node; node = node->next) {    if (node->data == val) {      mpls_link_list_remove_node(list,node);      mpls_link_list_node_delete(node);      break;    }  }}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆精品95视频| 粉嫩在线一区二区三区视频| 欧美三级电影在线观看| 一区二区三区四区不卡在线| 日韩欧美一区在线| 91美女视频网站| www.欧美色图| 亚洲成人黄色影院| 亚洲成精国产精品女| 日本一区二区成人在线| 亚洲精品在线观看视频| 在线观看一区二区精品视频| 欧美午夜不卡在线观看免费| 成人av资源在线观看| 99精品视频在线播放观看| 蜜乳av一区二区| 美女一区二区视频| 免费人成网站在线观看欧美高清| 天堂一区二区在线免费观看| 亚洲成人在线网站| 国内久久精品视频| 国产呦萝稀缺另类资源| 成人福利在线看| 91国产丝袜在线播放| 日韩一区二区三区四区五区六区| 欧美一区二区三级| 日韩一区二区三区视频在线| 久久精品一区二区三区四区| 中文幕一区二区三区久久蜜桃| 一个色在线综合| 国产成人激情av| av电影天堂一区二区在线| 欧美日韩在线播放一区| 91精品蜜臀在线一区尤物| 国产精品色婷婷久久58| 午夜欧美电影在线观看| 成人丝袜高跟foot| 精品精品国产高清a毛片牛牛| 国产精品久久久久一区二区三区| 久久久久久久久久久电影| 欧美xxxx在线观看| 久久99国产精品免费网站| 国产精品白丝av| 2024国产精品视频| 亚洲国产精品嫩草影院| 福利一区二区在线观看| 91精品国产一区二区三区香蕉| 国产精品二区一区二区aⅴ污介绍| 久久99久久久久| 国产视频在线观看一区二区三区| 国产成人在线看| 蜜芽一区二区三区| 日本福利一区二区| www.爱久久.com| 国产日产欧产精品推荐色| 国产ts人妖一区二区| 中文字幕亚洲一区二区av在线| 亚洲成av人片| 国产成人av电影在线| 97国产一区二区| 国产在线精品一区二区不卡了 | 久久精品视频一区| 国产欧美精品一区二区三区四区| 亚洲国产日韩综合久久精品| 激情综合色丁香一区二区| 色综合激情久久| 久久综合精品国产一区二区三区| 亚洲免费观看视频| 99精品一区二区三区| 5858s免费视频成人| 一区二区三区精品视频在线| 国产不卡视频在线播放| 精品奇米国产一区二区三区| 青青草精品视频| 91精品国产色综合久久不卡电影| 亚洲综合久久av| 色悠悠久久综合| 国产精品免费久久久久| 丁香啪啪综合成人亚洲小说| 久久久久久久久久久久久女国产乱| 日韩国产欧美在线观看| 91麻豆精品91久久久久久清纯 | 日韩一区二区在线播放| 亚洲成人综合在线| 91国偷自产一区二区使用方法| 亚洲欧美日韩精品久久久久| 一本色道综合亚洲| 亚洲精品少妇30p| 波多野结衣中文字幕一区二区三区| 欧美一区二区精美| 国模娜娜一区二区三区| 久久综合久久综合久久综合| 精品一区二区三区免费播放| 精品国精品国产尤物美女| 国产高清久久久| 亚洲天堂免费看| 欧美在线不卡一区| 美女网站视频久久| 国产三级欧美三级日产三级99| 国产在线一区观看| 国产三级精品视频| 不卡影院免费观看| 夜夜爽夜夜爽精品视频| 欧美日韩国产精品自在自线| 久久99国内精品| 国产欧美精品国产国产专区| 丁香桃色午夜亚洲一区二区三区| 国产精品三级视频| 欧美久久一二区| 蜜桃视频在线观看一区| 国产三区在线成人av| 欧美日韩一区二区在线视频| 看电视剧不卡顿的网站| 国产精品人妖ts系列视频| 91久久久免费一区二区| 婷婷激情综合网| 久久久久久久综合色一本| 国产麻豆午夜三级精品| 亚洲激情中文1区| 亚洲精品在线观看网站| 色94色欧美sute亚洲13| 激情国产一区二区| 亚洲成人1区2区| 成人免费小视频| 26uuu亚洲综合色欧美| 国产精品亚洲一区二区三区在线| 亚洲电影欧美电影有声小说| 国产欧美精品一区| 精品国产凹凸成av人导航| 在线日韩一区二区| 成人综合激情网| 另类小说图片综合网| 综合精品久久久| 久久人人爽人人爽| 日韩午夜在线观看| 欧美日韩国产系列| 91美女片黄在线| 成人午夜电影网站| 国产一区二区视频在线| 免费在线视频一区| 亚洲第四色夜色| 一区二区三区.www| 最新热久久免费视频| 国产欧美日韩在线观看| 精品国产一区a| 欧美一区二区久久| 欧美日韩成人综合| 欧美午夜精品久久久久久孕妇| 色综合久久99| 99riav一区二区三区| 97se亚洲国产综合自在线不卡| 国产一区二区三区| 国产精品99久久久久久宅男| 看片的网站亚洲| 国产麻豆精品视频| 精彩视频一区二区三区| 国产一区在线不卡| 国产一区亚洲一区| 成人一区在线看| 欧美伊人久久久久久午夜久久久久| 粉嫩aⅴ一区二区三区四区五区| 国产精品资源站在线| 国产成人99久久亚洲综合精品| 波多野结衣中文一区| 91免费精品国自产拍在线不卡| 99re66热这里只有精品3直播| 97se亚洲国产综合自在线观| 91福利资源站| 欧美日韩激情在线| 欧美一区二区免费视频| 欧美大胆一级视频| 久久久久久夜精品精品免费| 精品国免费一区二区三区| 欧美精彩视频一区二区三区| 亚洲丝袜精品丝袜在线| 亚洲国产日韩在线一区模特| 日韩电影一区二区三区| 麻豆成人综合网| 国产老肥熟一区二区三区| 成人91在线观看| 在线一区二区视频| 精品成人一区二区三区四区| 中文字幕免费不卡在线| 亚洲在线中文字幕| 精品一区二区三区免费播放| 国产69精品久久久久毛片| 欧美专区亚洲专区| 久久久亚洲精华液精华液精华液 | 亚洲精品日韩专区silk| 日本欧美肥老太交大片| 国产激情一区二区三区四区| 色综合久久久久综合体| 欧美一区二区久久久| 亚洲人成网站精品片在线观看| 日韩和欧美一区二区| 成人综合在线视频| 在线播放一区二区三区| 中文字幕一区二区在线观看| 蜜桃av一区二区三区| 91麻豆swag|