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

📄 dt_list.c

📁 Sun Solaris 10 中的 DTrace 组件的源代码。请参看: http://www.sun.com/software/solaris/observability.jsp
💻 C
字号:
/* * Copyright 2005 Sun Microsystems, Inc.  All rights reserved. * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only. * See the file usr/src/LICENSING.NOTICE in this distribution or * http://www.opensolaris.org/license/ for details. */#pragma ident	"@(#)dt_list.c	1.1	03/09/02 SMI"/* * Simple doubly-linked list implementation.  This implementation assumes that * each list element contains an embedded dt_list_t (previous and next * pointers), which is typically the first member of the element struct. * An additional dt_list_t is used to store the head (dl_next) and tail * (dl_prev) pointers.  The current head and tail list elements have their * previous and next pointers set to NULL, respectively. */#include <unistd.h>#include <assert.h>#include <dt_list.h>voiddt_list_append(dt_list_t *dlp, void *new){	dt_list_t *p = dlp->dl_prev;	/* p = tail list element */	dt_list_t *q = new;		/* q = new list element */	dlp->dl_prev = q;	q->dl_prev = p;	q->dl_next = NULL;	if (p != NULL) {		assert(p->dl_next == NULL);		p->dl_next = q;	} else {		assert(dlp->dl_next == NULL);		dlp->dl_next = q;	}}voiddt_list_prepend(dt_list_t *dlp, void *new){	dt_list_t *p = new;		/* p = new list element */	dt_list_t *q = dlp->dl_next;	/* q = head list element */	dlp->dl_next = p;	p->dl_prev = NULL;	p->dl_next = q;	if (q != NULL) {		assert(q->dl_prev == NULL);		q->dl_prev = p;	} else {		assert(dlp->dl_prev == NULL);		dlp->dl_prev = p;	}}voiddt_list_insert(dt_list_t *dlp, void *after_me, void *new){	dt_list_t *p = after_me;	dt_list_t *q = new;	if (p == NULL || p->dl_next == NULL) {		dt_list_append(dlp, new);		return;	}	q->dl_next = p->dl_next;	q->dl_prev = p;	p->dl_next = q;	q->dl_next->dl_prev = q;}voiddt_list_delete(dt_list_t *dlp, void *existing){	dt_list_t *p = existing;	if (p->dl_prev != NULL)		p->dl_prev->dl_next = p->dl_next;	else		dlp->dl_next = p->dl_next;	if (p->dl_next != NULL)		p->dl_next->dl_prev = p->dl_prev;	else		dlp->dl_prev = p->dl_prev;}

⌨️ 快捷键说明

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