Home | History | Annotate | Download | only in diskomizer
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 
     22 /*
     23  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 #pragma ident	"@(#)list.h	1.8	09/05/26 SMI"
     28 
     29 #ifndef _LIST_H
     30 #define	_LIST_H
     31 
     32 #ifdef	__cplusplus
     33 extern "C" {
     34 #endif
     35 
     36 #include <diskomizer/assert.h>
     37 #define	LIST_ADD(A, B) \
     38 { \
     39 	assert((B)->next == NULL && (B)->prev == NULL); \
     40 	if ((A)->head != NULL) { \
     41 		(B)->next = (A)->head; \
     42 		(A)->head->prev = (B); \
     43 	} \
     44 	if ((A)->tail == NULL) { \
     45 		(A)->tail = (B); \
     46 	} \
     47 	(A)->head = (B); \
     48 	(B)->prev = NULL; \
     49 }
     50 
     51 #define	LIST_REMOVE(A, B) \
     52 { \
     53 	if ((B)->prev == NULL) { \
     54 		(A)->head = (B)->next; \
     55 		if ((B)->next != NULL) \
     56 			(B)->next->prev = NULL; \
     57 	} else { \
     58 		(B)->prev->next = (B)->next; \
     59 	} \
     60 	if ((B)->next == NULL) { \
     61 		(A)->tail = (B)->prev; \
     62 		if ((B)->prev != NULL) \
     63 			(B)->prev->next = NULL; \
     64 	} else { \
     65 		(B)->next->prev = (B)->prev; \
     66 	} \
     67 	(B)->next = (B)->prev = NULL;\
     68 }
     69 #define	LIST_HEAD(A) ((A)->head)
     70 
     71 #ifdef	__cplusplus
     72 }
     73 #endif
     74 
     75 #endif /* _LIST_H */
     76